diff --git a/src/objects/core/zcl_abapgit_objects_check.clas.abap b/src/objects/core/zcl_abapgit_objects_check.clas.abap index 9853c043b..714be8829 100644 --- a/src/objects/core/zcl_abapgit_objects_check.clas.abap +++ b/src/objects/core/zcl_abapgit_objects_check.clas.abap @@ -151,30 +151,36 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION. APPEND INITIAL LINE TO lt_changes ASSIGNING . MOVE-CORRESPONDING TO . - CONCATENATE -lstate -rstate INTO lv_status RESPECTING BLANKS. + IF -packmove = abap_true. + -action = zif_abapgit_objects=>c_deserialize_action-packmove. + -icon = icon_package_standard. + -text = 'Change package assignment'. + ELSE. + CONCATENATE -lstate -rstate INTO lv_status RESPECTING BLANKS. - CASE lv_status. - WHEN ' '. " no changes - -action = zif_abapgit_objects=>c_deserialize_action-none. - WHEN ' A' OR 'D ' OR 'DM'. " added remotely or deleted locally - -action = zif_abapgit_objects=>c_deserialize_action-add. - -icon = icon_create. - -text = 'Add local object'. - WHEN 'A ' OR ' D' OR 'MD'. " added locally or deleted remotely - -action = zif_abapgit_objects=>c_deserialize_action-delete. - -icon = icon_delete. - -text = 'Delete local object'. - WHEN 'M ' OR 'MM'. " modified locally - -action = zif_abapgit_objects=>c_deserialize_action-overwrite. - -icon = icon_change. - -text = 'Overwrite local object'. - WHEN ' M'. " modified only remotely - -action = zif_abapgit_objects=>c_deserialize_action-update. - -icon = icon_change. - -text = 'Update local object'. - WHEN OTHERS. - ASSERT 0 = 1. - ENDCASE. + CASE lv_status. + WHEN ' '. " no changes + -action = zif_abapgit_objects=>c_deserialize_action-none. + WHEN ' A' OR 'D ' OR 'DM'. " added remotely or deleted locally + -action = zif_abapgit_objects=>c_deserialize_action-add. + -icon = icon_create. + -text = 'Add local object'. + WHEN 'A ' OR ' D' OR 'MD'. " added locally or deleted remotely + -action = zif_abapgit_objects=>c_deserialize_action-delete. + -icon = icon_delete. + -text = 'Delete local object'. + WHEN 'M ' OR 'MM'. " modified locally + -action = zif_abapgit_objects=>c_deserialize_action-overwrite. + -icon = icon_change. + -text = 'Overwrite local object'. + WHEN ' M'. " modified only remotely + -action = zif_abapgit_objects=>c_deserialize_action-update. + -icon = icon_change. + -text = 'Update local object'. + WHEN OTHERS. + ASSERT 0 = 1. + ENDCASE. + ENDIF. ENDLOOP. @@ -259,7 +265,7 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF it_results. lo_folder_logic = zcl_abapgit_folder_logic=>get_instance( ). - LOOP AT it_results ASSIGNING WHERE match IS INITIAL. + LOOP AT it_results ASSIGNING WHERE match IS INITIAL AND packmove IS INITIAL. lv_package = lo_folder_logic->path_to_package( iv_top = io_repo->get_package( ) diff --git a/src/objects/core/zcl_abapgit_objects_check.clas.testclasses.abap b/src/objects/core/zcl_abapgit_objects_check.clas.testclasses.abap index 99fe0de13..12546fe37 100644 --- a/src/objects/core/zcl_abapgit_objects_check.clas.testclasses.abap +++ b/src/objects/core/zcl_abapgit_objects_check.clas.testclasses.abap @@ -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. diff --git a/src/objects/zcl_abapgit_objects.clas.abap b/src/objects/zcl_abapgit_objects.clas.abap index ad0cbfb75..4b756d12b 100644 --- a/src/objects/zcl_abapgit_objects.clas.abap +++ b/src/objects/zcl_abapgit_objects.clas.abap @@ -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 = -path. ENDIF. + IF -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 diff --git a/src/objects/zif_abapgit_objects.intf.abap b/src/objects/zif_abapgit_objects.intf.abap index 5fec49b07..f3b0bbf90 100644 --- a/src/objects/zif_abapgit_objects.intf.abap +++ b/src/objects/zif_abapgit_objects.intf.abap @@ -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.