Improvements for uninstall (#3959)

* Improvements for uninstall

Uninstall now catches exceptions and tries up to 3 times to remove an object. Exceptions are only raised if after 3 tries some objects still remain. 

Tested with https://github.com/larshp/abapPGP

Closes https://github.com/abapGit/abapGit/issues/379 and https://github.com/abapGit/abapGit/issues/3949, and probably #3228

* Add SHLP

also ordered when by priority

* Conflict

* Move counter

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2020-10-03 03:17:11 -04:00 committed by GitHub
parent a49b68efa7
commit 24436879b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 28 deletions

View File

@ -475,6 +475,7 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
lt_tadir LIKE it_tadir, lt_tadir LIKE it_tadir,
lt_items TYPE zif_abapgit_definitions=>ty_items_tt, lt_items TYPE zif_abapgit_definitions=>ty_items_tt,
lx_error TYPE REF TO zcx_abapgit_exception, lx_error TYPE REF TO zcx_abapgit_exception,
lv_count TYPE i,
lv_text TYPE string. lv_text TYPE string.
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF it_tadir. FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF it_tadir.
@ -495,28 +496,44 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
check_objects_locked( iv_language = zif_abapgit_definitions=>c_english check_objects_locked( iv_language = zif_abapgit_definitions=>c_english
it_items = lt_items ). it_items = lt_items ).
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
li_progress->show( iv_current = sy-tabix
iv_text = |Delete { <ls_tadir>-obj_name }| ).
CLEAR ls_item.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name.
delete_obj(
iv_package = <ls_tadir>-devclass
is_item = ls_item ).
* make sure to save object deletions
COMMIT WORK.
ENDLOOP.
CATCH zcx_abapgit_exception INTO lx_error. CATCH zcx_abapgit_exception INTO lx_error.
zcl_abapgit_default_transport=>get_instance( )->reset( ). zcl_abapgit_default_transport=>get_instance( )->reset( ).
RAISE EXCEPTION lx_error. RAISE EXCEPTION lx_error.
ENDTRY. ENDTRY.
lv_count = 1.
DO 3 TIMES.
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
li_progress->show( iv_current = lv_count
iv_text = |Delete { <ls_tadir>-obj_name }| ).
CLEAR ls_item.
ls_item-obj_type = <ls_tadir>-object.
ls_item-obj_name = <ls_tadir>-obj_name.
TRY.
delete_obj(
iv_package = <ls_tadir>-devclass
is_item = ls_item ).
DELETE lt_tadir.
lv_count = lv_count + 1.
" make sure to save object deletions
COMMIT WORK.
CATCH zcx_abapgit_exception INTO lx_error ##NO_HANDLER.
" ignore errors inside the loops and raise it later
ENDTRY.
ENDLOOP.
ENDDO.
zcl_abapgit_default_transport=>get_instance( )->reset( ). zcl_abapgit_default_transport=>get_instance( )->reset( ).
IF lx_error IS BOUND AND lines( lt_tadir ) > 0.
RAISE EXCEPTION lx_error.
ENDIF.
ENDMETHOD. ENDMETHOD.

View File

@ -73,6 +73,7 @@ CLASS ZCL_ABAPGIT_DEPENDENCIES IMPLEMENTATION.
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir. FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir.
" misuse field KORRNUM to fix deletion sequence " misuse field KORRNUM to fix deletion sequence
" higher value means later deletion
LOOP AT ct_tadir ASSIGNING <ls_tadir>. LOOP AT ct_tadir ASSIGNING <ls_tadir>.
CASE <ls_tadir>-object. CASE <ls_tadir>-object.
@ -86,18 +87,9 @@ CLASS ZCL_ABAPGIT_DEPENDENCIES IMPLEMENTATION.
<ls_tadir>-korrnum = '810000'. <ls_tadir>-korrnum = '810000'.
WHEN 'DTEL'. WHEN 'DTEL'.
<ls_tadir>-korrnum = '800000'. <ls_tadir>-korrnum = '800000'.
WHEN 'DCLS'. WHEN 'SHLP'.
" AUTH and SUSO after DCLS " SHLP after TABL
<ls_tadir>-korrnum = '705000'. <ls_tadir>-korrnum = '760000'.
WHEN 'SUSO'.
" SUSO after DCLS
<ls_tadir>-korrnum = '710000'.
WHEN 'AUTH'.
" AUTH after DCLS
<ls_tadir>-korrnum = '715000'.
WHEN 'DDLS'.
" DDLS after DCLS but before other DDIC
<ls_tadir>-korrnum = '720000'.
WHEN 'TTYP' OR 'TABL' OR 'VIEW'. WHEN 'TTYP' OR 'TABL' OR 'VIEW'.
SELECT SINGLE tabclass FROM dd02l SELECT SINGLE tabclass FROM dd02l
INTO lv_tabclass INTO lv_tabclass
@ -110,6 +102,18 @@ CLASS ZCL_ABAPGIT_DEPENDENCIES IMPLEMENTATION.
ELSE. ELSE.
<ls_tadir>-korrnum = '750000'. <ls_tadir>-korrnum = '750000'.
ENDIF. ENDIF.
WHEN 'DDLS'.
" DDLS after DCLS but before other DDIC
<ls_tadir>-korrnum = '720000'.
WHEN 'AUTH'.
" AUTH after DCLS
<ls_tadir>-korrnum = '715000'.
WHEN 'SUSO'.
" SUSO after DCLS
<ls_tadir>-korrnum = '710000'.
WHEN 'DCLS'.
" AUTH and SUSO after DCLS
<ls_tadir>-korrnum = '705000'.
WHEN 'IASP'. WHEN 'IASP'.
<ls_tadir>-korrnum = '552000'. <ls_tadir>-korrnum = '552000'.
WHEN 'IARP'. WHEN 'IARP'.
@ -130,7 +134,7 @@ CLASS ZCL_ABAPGIT_DEPENDENCIES IMPLEMENTATION.
IF sy-subrc = 0. IF sy-subrc = 0.
<ls_tadir>-korrnum = '200000'. <ls_tadir>-korrnum = '200000'.
ELSE. ELSE.
<ls_tadir>-korrnum = '100000'. <ls_tadir>-korrnum = '180000'.
ENDIF. ENDIF.
WHEN 'IDOC'. WHEN 'IDOC'.
<ls_tadir>-korrnum = '200000'. <ls_tadir>-korrnum = '200000'.