mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Change Package Assignment (#4980)
* Change Package Assignment Previously, if an object was assigned to another package (but not changed otherwise), AG would delete and re-create the object. This was also visible in the "Selective Pull" popups: The new process is smarter and detects such changes. It re-assigns the package (via a TADIR change) and avoids dropping and re-creating. The package overwrite popup is also avoided (it will still appear if the object itself was changed, too): * Better icon * Add unit test Co-authored-by: Lars Hvam <larshp@hotmail.com> Co-authored-by: Alexander Tsybulsky <sbcgua@users.noreply.github.com>
This commit is contained in:
parent
3e14313f32
commit
0379bc6d11
|
@ -151,30 +151,36 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
|||
APPEND INITIAL LINE TO lt_changes ASSIGNING <ls_changes>.
|
||||
MOVE-CORRESPONDING <ls_result> TO <ls_changes>.
|
||||
|
||||
CONCATENATE <ls_result>-lstate <ls_result>-rstate INTO lv_status RESPECTING BLANKS.
|
||||
IF <ls_result>-packmove = abap_true.
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-packmove.
|
||||
<ls_changes>-icon = icon_package_standard.
|
||||
<ls_changes>-text = 'Change package assignment'.
|
||||
ELSE.
|
||||
CONCATENATE <ls_result>-lstate <ls_result>-rstate INTO lv_status RESPECTING BLANKS.
|
||||
|
||||
CASE lv_status.
|
||||
WHEN ' '. " no changes
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-none.
|
||||
WHEN ' A' OR 'D ' OR 'DM'. " added remotely or deleted locally
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-add.
|
||||
<ls_changes>-icon = icon_create.
|
||||
<ls_changes>-text = 'Add local object'.
|
||||
WHEN 'A ' OR ' D' OR 'MD'. " added locally or deleted remotely
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-delete.
|
||||
<ls_changes>-icon = icon_delete.
|
||||
<ls_changes>-text = 'Delete local object'.
|
||||
WHEN 'M ' OR 'MM'. " modified locally
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-overwrite.
|
||||
<ls_changes>-icon = icon_change.
|
||||
<ls_changes>-text = 'Overwrite local object'.
|
||||
WHEN ' M'. " modified only remotely
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-update.
|
||||
<ls_changes>-icon = icon_change.
|
||||
<ls_changes>-text = 'Update local object'.
|
||||
WHEN OTHERS.
|
||||
ASSERT 0 = 1.
|
||||
ENDCASE.
|
||||
CASE lv_status.
|
||||
WHEN ' '. " no changes
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-none.
|
||||
WHEN ' A' OR 'D ' OR 'DM'. " added remotely or deleted locally
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-add.
|
||||
<ls_changes>-icon = icon_create.
|
||||
<ls_changes>-text = 'Add local object'.
|
||||
WHEN 'A ' OR ' D' OR 'MD'. " added locally or deleted remotely
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-delete.
|
||||
<ls_changes>-icon = icon_delete.
|
||||
<ls_changes>-text = 'Delete local object'.
|
||||
WHEN 'M ' OR 'MM'. " modified locally
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-overwrite.
|
||||
<ls_changes>-icon = icon_change.
|
||||
<ls_changes>-text = 'Overwrite local object'.
|
||||
WHEN ' M'. " modified only remotely
|
||||
<ls_changes>-action = zif_abapgit_objects=>c_deserialize_action-update.
|
||||
<ls_changes>-icon = icon_change.
|
||||
<ls_changes>-text = 'Update local object'.
|
||||
WHEN OTHERS.
|
||||
ASSERT 0 = 1.
|
||||
ENDCASE.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
|
@ -259,7 +265,7 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
|||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||
|
||||
lo_folder_logic = zcl_abapgit_folder_logic=>get_instance( ).
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE match IS INITIAL.
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE match IS INITIAL AND packmove IS INITIAL.
|
||||
|
||||
lv_package = lo_folder_logic->path_to_package(
|
||||
iv_top = io_repo->get_package( )
|
||||
|
|
|
@ -17,6 +17,7 @@ CLASS ltcl_warning_overwrite_find DEFINITION FINAL FOR TESTING
|
|||
warning_overwrite_find_03 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_04 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_05 FOR TESTING RAISING cx_static_check,
|
||||
warning_overwrite_find_06 FOR TESTING RAISING cx_static_check,
|
||||
|
||||
given_result
|
||||
IMPORTING
|
||||
|
@ -151,6 +152,27 @@ CLASS ltcl_warning_overwrite_find IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD warning_overwrite_find_06.
|
||||
|
||||
" changed package assignment
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/;zag_unit_test.clas.abap;;;D;;X| ).
|
||||
given_result( |CLAS;ZAG_UNIT_TEST;;/src/sub;zag_unit_test.clas.abap;;;A;;X| ).
|
||||
|
||||
when_warning_overwrite_find( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lines( mt_overwrite ) ).
|
||||
|
||||
READ TABLE mt_overwrite INTO ms_overwrite INDEX 1.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = zif_abapgit_objects=>c_deserialize_action-packmove
|
||||
act = ms_overwrite-action ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD given_result.
|
||||
|
||||
DATA: ls_result LIKE LINE OF mt_result.
|
||||
|
@ -165,7 +187,8 @@ CLASS ltcl_warning_overwrite_find IMPLEMENTATION.
|
|||
ls_result-package
|
||||
ls_result-match
|
||||
ls_result-lstate
|
||||
ls_result-rstate.
|
||||
ls_result-rstate
|
||||
ls_result-packmove.
|
||||
|
||||
INSERT ls_result INTO TABLE mt_result.
|
||||
|
||||
|
|
|
@ -169,6 +169,10 @@ CLASS zcl_abapgit_objects DEFINITION
|
|||
!iv_obj_type TYPE tadir-object
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS change_package_assignments
|
||||
IMPORTING
|
||||
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||
!ii_log TYPE REF TO zif_abapgit_log.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -202,6 +206,28 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD change_package_assignments.
|
||||
|
||||
CALL FUNCTION 'TR_TADIR_INTERFACE'
|
||||
EXPORTING
|
||||
wi_tadir_pgmid = 'R3TR'
|
||||
wi_tadir_object = is_item-obj_type
|
||||
wi_tadir_obj_name = is_item-obj_name
|
||||
wi_tadir_devclass = is_item-devclass
|
||||
wi_test_modus = abap_false
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
IF sy-subrc = 0.
|
||||
ii_log->add_success( iv_msg = |Object { is_item-obj_name } assigned to package { is_item-devclass }|
|
||||
is_item = is_item ).
|
||||
ELSE.
|
||||
ii_log->add_error( iv_msg = |Package change of object { is_item-obj_name } failed|
|
||||
is_item = is_item ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD check_duplicates.
|
||||
|
||||
DATA: lt_files TYPE zif_abapgit_definitions=>ty_files_tt,
|
||||
|
@ -623,6 +649,16 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
lv_path = <ls_result>-path.
|
||||
ENDIF.
|
||||
|
||||
IF <ls_result>-packmove = abap_true.
|
||||
" Move object to new package
|
||||
ls_item-devclass = lv_package.
|
||||
change_package_assignments( is_item = ls_item
|
||||
ii_log = ii_log ).
|
||||
" No other changes required
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
" Create or update object
|
||||
CREATE OBJECT lo_files
|
||||
EXPORTING
|
||||
is_item = ls_item
|
||||
|
|
|
@ -37,6 +37,7 @@ INTERFACE zif_abapgit_objects
|
|||
overwrite TYPE i VALUE 3,
|
||||
delete TYPE i VALUE 4,
|
||||
delete_add TYPE i VALUE 5,
|
||||
packmove TYPE i VALUE 6,
|
||||
END OF c_deserialize_action.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
Loading…
Reference in New Issue
Block a user