diff --git a/src/zcl_abapgit_file_status.clas.abap b/src/zcl_abapgit_file_status.clas.abap index 0f7b98517..6aadd0a16 100644 --- a/src/zcl_abapgit_file_status.clas.abap +++ b/src/zcl_abapgit_file_status.clas.abap @@ -232,6 +232,12 @@ CLASS ZCL_ABAPGIT_FILE_STATUS IMPLEMENTATION. CLEAR -sha1. " Mark as processed ELSE. " Only L exists = build_new_local( ). + " Check if same file exists in different location + READ TABLE lt_remote ASSIGNING + WITH KEY filename = -file-filename. + IF sy-subrc = 0 AND -file-sha1 = -sha1. + -packmove = abap_true. + ENDIF. ENDIF. -inactive = -item-inactive. ENDLOOP. @@ -281,6 +287,12 @@ CLASS ZCL_ABAPGIT_FILE_STATUS IMPLEMENTATION. is_remote = it_items = lt_items_idx it_state = lt_state_idx ). + " Check if same file exists in different location + READ TABLE it_local ASSIGNING + WITH KEY file-filename = -filename. + IF sy-subrc = 0 AND -file-sha1 = -sha1. + -packmove = abap_true. + ENDIF. ENDLOOP. SORT rt_results BY @@ -348,6 +360,7 @@ CLASS ZCL_ABAPGIT_FILE_STATUS IMPLEMENTATION. ls_file TYPE zif_abapgit_definitions=>ty_file_signature, lt_res_sort LIKE it_results, lt_item_idx LIKE it_results, + lt_move_idx LIKE it_results, lo_folder_logic TYPE REF TO zcl_abapgit_folder_logic. FIELD-SYMBOLS: LIKE LINE OF it_results, @@ -359,11 +372,28 @@ CLASS ZCL_ABAPGIT_FILE_STATUS IMPLEMENTATION. RETURN. ENDIF. + " Find all objects which were assigned to a different package + LOOP AT it_results ASSIGNING + WHERE lstate = zif_abapgit_definitions=>c_state-added AND packmove = abap_true. + READ TABLE lt_move_idx TRANSPORTING NO FIELDS + WITH KEY obj_type = -obj_type obj_name = -obj_name + BINARY SEARCH. " Sorted since it_result is sorted + IF sy-subrc <> 0. + ii_log->add( iv_msg = |Changed package assignment for object { -obj_type } { -obj_name }| + iv_type = 'W' + iv_rc = '5' ) ##no_text. + APPEND INITIAL LINE TO lt_move_idx ASSIGNING . + -obj_type = -obj_type. + -obj_name = -obj_name. + -path = -path. + ENDIF. + ENDLOOP. + " Collect object indexe lt_res_sort = it_results. SORT lt_res_sort BY obj_type ASCENDING obj_name ASCENDING. - LOOP AT it_results ASSIGNING WHERE NOT obj_type IS INITIAL. + LOOP AT it_results ASSIGNING WHERE NOT obj_type IS INITIAL AND packmove = abap_false. IF NOT ( -obj_type = ls_item-obj_type AND -obj_name = ls_item-obj_name ). APPEND INITIAL LINE TO lt_item_idx ASSIGNING . @@ -375,8 +405,8 @@ CLASS ZCL_ABAPGIT_FILE_STATUS IMPLEMENTATION. ENDLOOP. " Check files for one object is in the same folder - - LOOP AT it_results ASSIGNING WHERE NOT obj_type IS INITIAL AND obj_type <> 'DEVC'. + LOOP AT it_results ASSIGNING + WHERE NOT obj_type IS INITIAL AND obj_type <> 'DEVC' AND packmove = abap_false. READ TABLE lt_item_idx ASSIGNING WITH KEY obj_type = -obj_type obj_name = -obj_name BINARY SEARCH. " Sorted above @@ -385,14 +415,14 @@ CLASS ZCL_ABAPGIT_FILE_STATUS IMPLEMENTATION. ii_log->add( iv_msg = |Files for object { -obj_type } { -obj_name } are not placed in the same folder| iv_type = 'W' - iv_rc = '1' ) ##no_text. + iv_rc = '1' ) ##no_text. ENDIF. ENDLOOP. " Check that objects are created in package corresponding to folder lo_folder_logic = zcl_abapgit_folder_logic=>get_instance( ). LOOP AT it_results ASSIGNING - WHERE NOT package IS INITIAL AND NOT path IS INITIAL. + WHERE NOT package IS INITIAL AND NOT path IS INITIAL AND packmove = abap_false. lv_path = lo_folder_logic->package_to_path( iv_top = iv_top io_dot = io_dot @@ -401,14 +431,14 @@ CLASS ZCL_ABAPGIT_FILE_STATUS IMPLEMENTATION. ii_log->add( iv_msg = |Package and path does not match for object, { -obj_type } { -obj_name }| iv_type = 'W' - iv_rc = '2' ) ##no_text. + iv_rc = '2' ) ##no_text. ENDIF. ENDLOOP. " Check for multiple files with same filename SORT lt_res_sort BY filename ASCENDING. - LOOP AT lt_res_sort ASSIGNING WHERE obj_type <> 'DEVC'. + LOOP AT lt_res_sort ASSIGNING WHERE obj_type <> 'DEVC' AND packmove = abap_false. IF -filename IS NOT INITIAL AND -filename = ls_file-filename. ii_log->add( iv_msg = |Multiple files with same filename, { -filename }| iv_type = 'W' diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index 05b7a7c1b..9ba9924ce 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -198,6 +198,7 @@ INTERFACE zif_abapgit_definitions match TYPE abap_bool, lstate TYPE c LENGTH 1, rstate TYPE c LENGTH 1, + packmove TYPE abap_bool, END OF ty_result . TYPES: ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY .