DEVC: Unlock in case of errors (#4561)

* DEVC: Unlock in case of errors

If a package object cannot be deleted or deserialized properly, it remains locked.

The change unlocks the object in these cases.

* Update set_lock

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2021-02-28 11:16:33 -05:00 committed by GitHub
parent 0392543ff5
commit da43c34fc4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -186,51 +186,88 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
METHOD set_lock.
DATA: lv_changeable TYPE abap_bool.
ii_package->get_changeable( IMPORTING e_changeable = lv_changeable ).
IF lv_changeable <> iv_lock.
ii_package->set_changeable(
EXPORTING
i_changeable = iv_lock
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11 ).
TRY.
CALL METHOD ii_package->('SET_CHANGEABLE')
EXPORTING
i_changeable = iv_lock
i_suppress_dialog = abap_true " Parameter missing in 702
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11.
CATCH cx_sy_dyn_call_param_not_found.
ii_package->set_changeable(
EXPORTING
i_changeable = iv_lock
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11 ).
ENDTRY.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDIF.
ii_package->set_permissions_changeable(
EXPORTING
i_changeable = iv_lock
* downport, does not exist in 7.30. Let's see if we can get along without it
* i_suppress_dialog = abap_true
EXCEPTIONS
object_already_changeable = 1
object_already_unlocked = 2
object_locked_by_other_user = 3
object_modified = 4
object_just_created = 5
object_deleted = 6
permission_failure = 7
object_invalid = 8
unexpected_error = 9
OTHERS = 10 ).
TRY.
CALL METHOD ii_package->('SET_PERMISSIONS_CHANGEABLE')
EXPORTING
i_changeable = iv_lock
i_suppress_dialog = abap_true " Parameter missing in 702
EXCEPTIONS
object_already_changeable = 1
object_already_unlocked = 2
object_locked_by_other_user = 3
object_modified = 4
object_just_created = 5
object_deleted = 6
permission_failure = 7
object_invalid = 8
unexpected_error = 9
OTHERS = 10.
CATCH cx_sy_dyn_call_param_not_found.
ii_package->set_permissions_changeable(
EXPORTING
i_changeable = iv_lock
EXCEPTIONS
object_already_changeable = 1
object_already_unlocked = 2
object_locked_by_other_user = 3
object_modified = 4
object_just_created = 5
object_deleted = 6
permission_failure = 7
object_invalid = 8
unexpected_error = 9
OTHERS = 10 ).
ENDTRY.
IF ( sy-subrc = 1 AND iv_lock = abap_true ) OR ( sy-subrc = 2 AND iv_lock = abap_false ).
" There's no getter to find out beforehand...
ELSEIF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
@ -354,45 +391,8 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
RETURN.
ENDIF.
TRY.
CALL METHOD li_package->('SET_CHANGEABLE')
EXPORTING
i_changeable = abap_true
i_suppress_dialog = abap_true " Parameter missing in 702
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11.
CATCH cx_root.
li_package->set_changeable(
EXPORTING
i_changeable = abap_true
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11 ).
ENDTRY.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
set_lock( ii_package = li_package
iv_lock = abap_true ).
TRY.
CALL METHOD li_package->('DELETE')
@ -418,6 +418,8 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
ENDTRY.
IF sy-subrc <> 0.
set_lock( ii_package = li_package
iv_lock = abap_false ).
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
@ -448,6 +450,8 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
ENDTRY.
IF sy-subrc <> 0.
set_lock( ii_package = li_package
iv_lock = abap_false ).
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
@ -519,7 +523,7 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
IF li_package IS BOUND.
" Package already exists, change it
set_lock( ii_package = li_package
iv_lock = abap_true ).
iv_lock = abap_true ).
li_package->set_all_attributes(
EXPORTING
@ -545,6 +549,8 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
* superpackage_invalid = 17 downport, does not exist in 7.30
OTHERS = 18 ).
IF sy-subrc <> 0.
set_lock( ii_package = li_package
iv_lock = abap_false ).
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
@ -613,11 +619,14 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
object_invalid = 4
OTHERS = 5 ).
IF sy-subrc <> 0.
set_lock( ii_package = li_package
iv_lock = abap_false ).
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
set_lock( ii_package = li_package
iv_lock = abap_false ).
iv_lock = abap_false ).
ENDMETHOD.