diff --git a/src/objects/core/zcl_abapgit_file_status.clas.abap b/src/objects/core/zcl_abapgit_file_status.clas.abap index d252141c3..8f79f1f1e 100644 --- a/src/objects/core/zcl_abapgit_file_status.clas.abap +++ b/src/objects/core/zcl_abapgit_file_status.clas.abap @@ -440,6 +440,7 @@ CLASS zcl_abapgit_file_status IMPLEMENTATION. DATA: lv_path TYPE string, + lv_object TYPE string, lo_folder_logic TYPE REF TO zcl_abapgit_folder_logic. FIELD-SYMBOLS LIKE LINE OF it_results. @@ -454,12 +455,12 @@ CLASS zcl_abapgit_file_status IMPLEMENTATION. io_dot = io_dot iv_package = -package ). - IF lv_path <> -path. - ii_log->add( iv_msg = |Package and path do not match for object { - -obj_type } { -obj_name }| - iv_type = 'W' ). - ELSEIF lv_path IS INITIAL. - zcx_abapgit_exception=>raise( |Error determining parent package of package { -package }| ). + lv_object = |{ -obj_type } { -obj_name }|. + + IF lv_path IS INITIAL. + ii_log->add_error( |{ lv_object } already exists outside of { iv_top } package hierarchy| ). + ELSEIF lv_path <> -path. + ii_log->add_warning( |Package and path do not match for object { lv_object }| ). ENDIF. ENDLOOP. diff --git a/src/objects/core/zcl_abapgit_folder_logic.clas.abap b/src/objects/core/zcl_abapgit_folder_logic.clas.abap index c7ebf7590..d41693784 100644 --- a/src/objects/core/zcl_abapgit_folder_logic.clas.abap +++ b/src/objects/core/zcl_abapgit_folder_logic.clas.abap @@ -30,6 +30,7 @@ CLASS zcl_abapgit_folder_logic DEFINITION METHODS get_parent IMPORTING + !iv_top TYPE devclass !iv_package TYPE devclass RETURNING VALUE(rv_parent) TYPE devclass @@ -45,6 +46,7 @@ CLASS zcl_abapgit_folder_logic DEFINITION TYPES: ty_devclass_info_tt TYPE SORTED TABLE OF ty_devclass_info WITH UNIQUE KEY devclass . + DATA mt_top_subpackages TYPE ty_devclass_info_tt . DATA mt_parent TYPE ty_devclass_info_tt . ENDCLASS. @@ -61,6 +63,16 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION. METHOD get_parent. DATA: ls_parent LIKE LINE OF mt_parent. + " Check that package is included in the TOP package hierarchy + IF mt_top_subpackages IS INITIAL. + mt_top_subpackages = zcl_abapgit_factory=>get_sap_package( iv_top )->list_subpackages( ). + ENDIF. + + READ TABLE mt_top_subpackages TRANSPORTING NO FIELDS WITH KEY devclass = iv_package. + IF sy-subrc <> 0. + RETURN. + ENDIF. + "Determine Parent Package READ TABLE mt_parent INTO ls_parent WITH TABLE KEY devclass = iv_package. @@ -86,7 +98,9 @@ CLASS zcl_abapgit_folder_logic IMPLEMENTATION. IF iv_top = iv_package. rv_path = io_dot->get_starting_folder( ). ELSE. - lv_parentcl = get_parent( iv_package ). + lv_parentcl = get_parent( + iv_top = iv_top + iv_package = iv_package ). " If the parent package can not be determined, we return an initial path and handle " it outside of this class (in zcl_abapgit_file_status) diff --git a/src/objects/core/zcl_abapgit_folder_logic.clas.testclasses.abap b/src/objects/core/zcl_abapgit_folder_logic.clas.testclasses.abap index d512c7536..8c802cb84 100644 --- a/src/objects/core/zcl_abapgit_folder_logic.clas.testclasses.abap +++ b/src/objects/core/zcl_abapgit_folder_logic.clas.testclasses.abap @@ -35,6 +35,10 @@ CLASS ltcl_folder_logic_helper IMPLEMENTATION. io_dot = lo_dot iv_package = iv_package ). + IF lv_path IS INITIAL. + zcx_abapgit_exception=>raise( 'Unable to determine path' ). + ENDIF. + cl_abap_unit_assert=>assert_equals( act = lv_package exp = iv_package ). @@ -57,7 +61,11 @@ ENDCLASS. CLASS ltcl_folder_logic_package IMPLEMENTATION. METHOD zif_abapgit_sap_package~list_subpackages. - RETURN. + DATA lv_devclass TYPE devclass. + lv_devclass = '$TOP_BAR'. + INSERT lv_devclass INTO TABLE rt_list. + lv_devclass = '$TOP_FOO_BAR'. + INSERT lv_devclass INTO TABLE rt_list. ENDMETHOD. METHOD zif_abapgit_sap_package~list_superpackages. @@ -125,8 +133,22 @@ ENDCLASS. CLASS ltcl_folder_logic IMPLEMENTATION. + " Test packages: + " + " $TOP + " > $TOP_FOO + " > > $TOP_BAR + " > > $TOP_FOO_BAR + " + " $FOOBAR (outside of $TOP) METHOD zif_abapgit_sap_package~list_subpackages. - RETURN. + DATA lv_devclass TYPE devclass. + lv_devclass = '$TOP_BAR'. + INSERT lv_devclass INTO TABLE rt_list. + lv_devclass = '$TOP_FOO'. + INSERT lv_devclass INTO TABLE rt_list. + lv_devclass = '$TOP_FOO_BAR'. + INSERT lv_devclass INTO TABLE rt_list. ENDMETHOD. METHOD zif_abapgit_sap_package~list_superpackages. @@ -322,8 +344,17 @@ ENDCLASS. CLASS ltcl_folder_logic_namespaces IMPLEMENTATION. + " Test packages: + " + " /TEST/TOOLS + " > /TEST/T1 + " > /TEST/TOOLS_T1 METHOD zif_abapgit_sap_package~list_subpackages. - RETURN. + DATA lv_devclass TYPE devclass. + lv_devclass = '/TEST/T1'. + INSERT lv_devclass INTO TABLE rt_list. + lv_devclass = '/TEST/TOOLS_T1'. + INSERT lv_devclass INTO TABLE rt_list. ENDMETHOD. METHOD zif_abapgit_sap_package~list_superpackages. diff --git a/src/objects/core/zcl_abapgit_objects_check.clas.abap b/src/objects/core/zcl_abapgit_objects_check.clas.abap index 8720a6c06..e28478c2b 100644 --- a/src/objects/core/zcl_abapgit_objects_check.clas.abap +++ b/src/objects/core/zcl_abapgit_objects_check.clas.abap @@ -284,6 +284,9 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION. ls_overwrite-obj_type = -obj_type. ls_overwrite-obj_name = -obj_name. ls_overwrite-devclass = ls_tadir-devclass. + ls_overwrite-action = zif_abapgit_objects=>c_deserialize_action-overwrite. + ls_overwrite-icon = icon_change. + ls_overwrite-text = 'Overwrite local object'. INSERT ls_overwrite INTO TABLE lt_overwrite_unique. ENDIF. diff --git a/src/ui/zcl_abapgit_services_repo.clas.abap b/src/ui/zcl_abapgit_services_repo.clas.abap index 7eb74f163..93918a9c3 100644 --- a/src/ui/zcl_abapgit_services_repo.clas.abap +++ b/src/ui/zcl_abapgit_services_repo.clas.abap @@ -95,7 +95,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. +CLASS zcl_abapgit_services_repo IMPLEMENTATION. METHOD check_package. @@ -395,6 +395,14 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. -name = 'OBJ_NAME'. APPEND INITIAL LINE TO lt_columns ASSIGNING . -name = 'DEVCLASS'. + APPEND INITIAL LINE TO lt_columns ASSIGNING . + -name = 'ICON'. + -text = 'Action'. + -show_icon = abap_true. + -length = 5. + APPEND INITIAL LINE TO lt_columns ASSIGNING . + -name = 'TEXT'. + -text = 'Description'. li_popups = zcl_abapgit_ui_factory=>get_popups( ). li_popups->popup_to_select_from_list(