mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 03:36:32 +08:00
#521 preperations
* add FOLDER_LOGIC to dot abapgit * refactor folder logic to separate class * move lcl_sap_package=>check to file_status class * DDLS fix exists method
This commit is contained in:
parent
0662e44dc6
commit
aab96d313b
|
@ -4,6 +4,7 @@
|
|||
<DATA>
|
||||
<MASTER_LANGUAGE>E</MASTER_LANGUAGE>
|
||||
<STARTING_FOLDER>/src/</STARTING_FOLDER>
|
||||
<FOLDER_LOGIC>PREFIX</FOLDER_LOGIC>
|
||||
<IGNORE>
|
||||
<item>/.travis.yml</item>
|
||||
<item>/CONTRIBUTING.md</item>
|
||||
|
|
|
@ -48,6 +48,7 @@ INCLUDE zabapgit_persistence_old.
|
|||
INCLUDE zabapgit_persistence.
|
||||
INCLUDE zabapgit_dot_abapgit.
|
||||
INCLUDE zabapgit_sap_package.
|
||||
INCLUDE zabapgit_folder_logic.
|
||||
|
||||
INCLUDE zabapgit_stage.
|
||||
INCLUDE zabapgit_git_helpers.
|
||||
|
|
|
@ -4,6 +4,11 @@
|
|||
|
||||
CLASS ltcl_dot_abapgit DEFINITION DEFERRED.
|
||||
|
||||
CONSTANTS: BEGIN OF c_folder_logic,
|
||||
prefix TYPE string VALUE 'PREFIX',
|
||||
full TYPE string VALUE 'FULL',
|
||||
END OF c_folder_logic.
|
||||
|
||||
CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
@ -32,6 +37,8 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
|
|||
iv_filename TYPE string,
|
||||
get_starting_folder
|
||||
RETURNING VALUE(rv_path) TYPE string,
|
||||
get_folder_logic
|
||||
RETURNING VALUE(rv_logic) TYPE string,
|
||||
* set_starting_folder
|
||||
* IMPORTING iv_path TYPE string,
|
||||
get_master_language
|
||||
|
@ -46,6 +53,7 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
|
|||
TYPES: BEGIN OF ty_dot_abapgit,
|
||||
master_language TYPE spras,
|
||||
starting_folder TYPE string,
|
||||
folder_logic TYPE string,
|
||||
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||
END OF ty_dot_abapgit.
|
||||
|
||||
|
@ -105,6 +113,8 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
|||
|
||||
ls_data-master_language = iv_master_language.
|
||||
ls_data-starting_folder = '/'.
|
||||
ls_data-folder_logic = c_folder_logic-prefix.
|
||||
|
||||
APPEND '/.gitignore' TO ls_data-ignore.
|
||||
APPEND '/LICENSE' TO ls_data-ignore.
|
||||
APPEND '/README.md' TO ls_data-ignore.
|
||||
|
@ -118,6 +128,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
METHOD to_xml.
|
||||
|
||||
CALL TRANSFORMATION id
|
||||
SOURCE data = is_data
|
||||
RESULT XML rv_xml.
|
||||
|
@ -129,6 +140,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
|||
IN rv_xml
|
||||
WITH '<?xml version="1.0" encoding="utf-8"?>'.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD from_xml.
|
||||
|
@ -145,6 +157,12 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
|||
OPTIONS value_handling = 'accept_data_loss'
|
||||
SOURCE XML lv_xml
|
||||
RESULT data = rs_data ##NO_TEXT.
|
||||
|
||||
* downward compatibility
|
||||
IF rs_data-folder_logic IS INITIAL.
|
||||
rs_data-folder_logic = c_folder_logic-prefix.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_ignore.
|
||||
|
@ -198,6 +216,10 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
|||
rv_path = ms_data-starting_folder.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_folder_logic.
|
||||
rv_logic = ms_data-folder_logic.
|
||||
ENDMETHOD.
|
||||
|
||||
* METHOD set_starting_folder.
|
||||
* ms_data-starting_folder = iv_path.
|
||||
* ENDMETHOD.
|
||||
|
|
|
@ -6,9 +6,10 @@
|
|||
* CLASS lcl_file_status DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS ltcl_file_status DEFINITION DEFERRED.
|
||||
CLASS ltcl_file_status2 DEFINITION DEFERRED.
|
||||
|
||||
CLASS lcl_file_status DEFINITION FINAL
|
||||
FRIENDS ltcl_file_status.
|
||||
FRIENDS ltcl_file_status ltcl_file_status2.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
|
@ -20,14 +21,18 @@ CLASS lcl_file_status DEFINITION FINAL
|
|||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CLASS-METHODS calculate_status
|
||||
IMPORTING iv_devclass TYPE devclass
|
||||
it_local TYPE ty_files_item_tt
|
||||
it_remote TYPE ty_files_tt
|
||||
it_cur_state TYPE ty_file_signatures_tt
|
||||
RETURNING VALUE(rt_results) TYPE ty_results_tt.
|
||||
|
||||
CLASS-METHODS:
|
||||
calculate_status
|
||||
IMPORTING iv_devclass TYPE devclass
|
||||
it_local TYPE ty_files_item_tt
|
||||
it_remote TYPE ty_files_tt
|
||||
it_cur_state TYPE ty_file_signatures_tt
|
||||
RETURNING VALUE(rt_results) TYPE ty_results_tt,
|
||||
run_checks
|
||||
IMPORTING io_log TYPE REF TO lcl_log
|
||||
it_results TYPE ty_results_tt
|
||||
iv_start TYPE string
|
||||
iv_top TYPE devclass,
|
||||
build_existing
|
||||
IMPORTING is_local TYPE ty_file_item
|
||||
is_remote TYPE ty_file
|
||||
|
@ -54,6 +59,89 @@ ENDCLASS. "lcl_file_status DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_file_status IMPLEMENTATION.
|
||||
|
||||
METHOD run_checks.
|
||||
|
||||
DATA: lv_path TYPE string,
|
||||
ls_item TYPE ty_item,
|
||||
ls_file TYPE ty_file_signature,
|
||||
lt_res_sort LIKE it_results,
|
||||
lt_item_idx LIKE it_results.
|
||||
|
||||
FIELD-SYMBOLS: <ls_res1> LIKE LINE OF it_results,
|
||||
<ls_res2> LIKE LINE OF it_results.
|
||||
|
||||
|
||||
IF io_log IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
" Collect object indexe
|
||||
lt_res_sort = it_results.
|
||||
SORT lt_res_sort BY obj_type ASCENDING obj_name ASCENDING.
|
||||
|
||||
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
|
||||
IF NOT ( <ls_res1>-obj_type = ls_item-obj_type
|
||||
AND <ls_res1>-obj_name = ls_item-obj_name ).
|
||||
APPEND INITIAL LINE TO lt_item_idx ASSIGNING <ls_res2>.
|
||||
<ls_res2>-obj_type = <ls_res1>-obj_type.
|
||||
<ls_res2>-obj_name = <ls_res1>-obj_name.
|
||||
<ls_res2>-path = <ls_res1>-path.
|
||||
MOVE-CORRESPONDING <ls_res1> TO ls_item.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
" Check files for one object is in the same folder
|
||||
|
||||
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
|
||||
READ TABLE lt_item_idx ASSIGNING <ls_res2>
|
||||
WITH KEY obj_type = <ls_res1>-obj_type obj_name = <ls_res1>-obj_name
|
||||
BINARY SEARCH. " Sorted above
|
||||
|
||||
IF sy-subrc <> 0 OR <ls_res1>-path <> <ls_res2>-path. " All paths are same
|
||||
io_log->add( iv_msgv1 = 'Files for object'
|
||||
iv_msgv2 = <ls_res1>-obj_type
|
||||
iv_msgv3 = <ls_res1>-obj_name
|
||||
iv_msgv4 = 'are not placed in the same folder'
|
||||
iv_rc = '1' ) ##no_text.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
" Check that objects are created in package corresponding to folder
|
||||
LOOP AT it_results ASSIGNING <ls_res1>
|
||||
WHERE NOT package IS INITIAL AND NOT path IS INITIAL.
|
||||
lv_path = lcl_folder_logic=>class_to_path( iv_top = iv_top
|
||||
iv_start = iv_start
|
||||
iv_package = <ls_res1>-package ).
|
||||
IF lv_path <> <ls_res1>-path.
|
||||
io_log->add( iv_msgv1 = 'Package and path does not match for object,'
|
||||
iv_msgv2 = <ls_res1>-obj_type
|
||||
iv_msgv3 = <ls_res1>-obj_name
|
||||
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 <ls_res1>.
|
||||
IF <ls_res1>-filename IS NOT INITIAL AND <ls_res1>-filename = ls_file-filename.
|
||||
io_log->add( iv_msgv1 = 'Multiple files with same filename,'
|
||||
iv_msgv2 = <ls_res1>-filename
|
||||
iv_rc = '3' ) ##no_text.
|
||||
ENDIF.
|
||||
|
||||
IF <ls_res1>-filename IS INITIAL.
|
||||
io_log->add( iv_msgv1 = 'Filename is empty for object'
|
||||
iv_msgv2 = <ls_res1>-obj_type
|
||||
iv_msgv3 = <ls_res1>-obj_name
|
||||
iv_rc = '4' ) ##no_text.
|
||||
ENDIF.
|
||||
|
||||
MOVE-CORRESPONDING <ls_res1> TO ls_file.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD. "check
|
||||
|
||||
METHOD status.
|
||||
|
||||
DATA: lv_index LIKE sy-tabix,
|
||||
|
@ -82,7 +170,7 @@ CLASS lcl_file_status IMPLEMENTATION.
|
|||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
lcl_sap_package=>check(
|
||||
run_checks(
|
||||
io_log = io_log
|
||||
it_results = rt_results
|
||||
iv_start = lo_dot_abapgit->get_starting_folder( )
|
||||
|
|
98
src/zabapgit_folder_logic.prog.abap
Normal file
98
src/zabapgit_folder_logic.prog.abap
Normal file
|
@ -0,0 +1,98 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_FOLDER_LOGIC
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_folder_logic DEFINITION.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS:
|
||||
class_to_path
|
||||
IMPORTING
|
||||
iv_top TYPE devclass
|
||||
iv_start TYPE string
|
||||
iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(rv_path) TYPE string.
|
||||
|
||||
CLASS-METHODS
|
||||
path_to_package
|
||||
IMPORTING iv_top TYPE devclass
|
||||
iv_start TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING VALUE(rv_package) TYPE devclass
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_folder_logic IMPLEMENTATION.
|
||||
|
||||
METHOD path_to_package.
|
||||
|
||||
DATA: lv_length TYPE i,
|
||||
lv_parent TYPE devclass,
|
||||
lv_new TYPE string,
|
||||
lv_path TYPE string.
|
||||
|
||||
|
||||
lv_length = strlen( iv_start ).
|
||||
lv_path = iv_path+lv_length.
|
||||
lv_parent = iv_top.
|
||||
rv_package = iv_top.
|
||||
|
||||
WHILE lv_path CA '/'.
|
||||
SPLIT lv_path AT '/' INTO lv_new lv_path.
|
||||
|
||||
CONCATENATE rv_package '_' lv_new INTO rv_package.
|
||||
TRANSLATE rv_package TO UPPER CASE.
|
||||
|
||||
IF lcl_sap_package=>exists( rv_package ) = abap_false.
|
||||
lcl_sap_package=>create_child( iv_parent = lv_parent
|
||||
iv_child = rv_package ).
|
||||
ENDIF.
|
||||
|
||||
lv_parent = rv_package.
|
||||
ENDWHILE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_to_path.
|
||||
|
||||
DATA: lv_len TYPE i,
|
||||
lv_path TYPE string,
|
||||
lv_parentcl TYPE tdevc-parentcl.
|
||||
|
||||
|
||||
IF iv_top = iv_package.
|
||||
rv_path = iv_start.
|
||||
ELSE.
|
||||
SELECT SINGLE parentcl FROM tdevc INTO lv_parentcl
|
||||
WHERE devclass = iv_package. "#EC CI_SUBRC "#EC CI_GENBUFF
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
IF lv_parentcl IS INITIAL.
|
||||
rv_path = 'error' ##no_text.
|
||||
ELSE.
|
||||
lv_len = strlen( lv_parentcl ).
|
||||
lv_path = iv_package+lv_len.
|
||||
IF strlen( lv_path ) = 0.
|
||||
RETURN. " prevent dump
|
||||
ENDIF.
|
||||
IF lv_path(1) = '_'.
|
||||
lv_path = lv_path+1.
|
||||
ENDIF.
|
||||
TRANSLATE lv_path TO LOWER CASE.
|
||||
CONCATENATE lv_path '/' INTO lv_path.
|
||||
|
||||
rv_path = class_to_path( iv_top = iv_top
|
||||
iv_start = iv_start
|
||||
iv_package = lv_parentcl ).
|
||||
|
||||
CONCATENATE rv_path lv_path INTO rv_path.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "class_to_path
|
||||
|
||||
ENDCLASS.
|
22
src/zabapgit_folder_logic.prog.xml
Normal file
22
src/zabapgit_folder_logic.prog.xml
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_FOLDER_LOGIC</NAME>
|
||||
<STATE>A</STATE>
|
||||
<VARCL>X</VARCL>
|
||||
<SUBC>I</SUBC>
|
||||
<RLOAD>E</RLOAD>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>Include ZABAPGIT_FOLDER_LOGIC</ENTRY>
|
||||
<LENGTH>29</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -39,8 +39,31 @@ CLASS lcl_object_ddls IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~get_metadata
|
||||
|
||||
METHOD lif_object~exists.
|
||||
* todo
|
||||
rv_bool = abap_true.
|
||||
|
||||
DATA: lv_state TYPE objstate,
|
||||
li_ddl TYPE REF TO object.
|
||||
|
||||
|
||||
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
|
||||
RECEIVING
|
||||
handler = li_ddl.
|
||||
|
||||
TRY.
|
||||
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~READ')
|
||||
EXPORTING
|
||||
name = ms_item-obj_name
|
||||
get_state = 'A'
|
||||
IMPORTING
|
||||
got_state = lv_state.
|
||||
IF lv_state IS INITIAL.
|
||||
rv_bool = abap_false.
|
||||
ELSE.
|
||||
rv_bool = abap_true.
|
||||
ENDIF.
|
||||
CATCH cx_root.
|
||||
rv_bool = abap_false.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
|
|
@ -1729,14 +1729,6 @@ CLASS lcl_objects DEFINITION FINAL.
|
|||
IMPORTING it_results TYPE ty_results_tt
|
||||
RETURNING VALUE(rt_results) TYPE ty_results_tt.
|
||||
|
||||
CLASS-METHODS
|
||||
path_to_package
|
||||
IMPORTING iv_top TYPE devclass
|
||||
iv_start TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING VALUE(rv_package) TYPE devclass
|
||||
RAISING lcx_exception.
|
||||
|
||||
CLASS-METHODS class_name
|
||||
IMPORTING is_item TYPE ty_item
|
||||
RETURNING VALUE(rv_class_name) TYPE string.
|
||||
|
|
|
@ -223,35 +223,6 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "exists
|
||||
|
||||
METHOD path_to_package.
|
||||
|
||||
DATA: lv_length TYPE i,
|
||||
lv_parent TYPE devclass,
|
||||
lv_new TYPE string,
|
||||
lv_path TYPE string.
|
||||
|
||||
|
||||
lv_length = strlen( iv_start ).
|
||||
lv_path = iv_path+lv_length.
|
||||
lv_parent = iv_top.
|
||||
rv_package = iv_top.
|
||||
|
||||
WHILE lv_path CA '/'.
|
||||
SPLIT lv_path AT '/' INTO lv_new lv_path.
|
||||
|
||||
CONCATENATE rv_package '_' lv_new INTO rv_package.
|
||||
TRANSLATE rv_package TO UPPER CASE.
|
||||
|
||||
IF lcl_sap_package=>exists( rv_package ) = abap_false.
|
||||
lcl_sap_package=>create_child( iv_parent = lv_parent
|
||||
iv_child = rv_package ).
|
||||
ENDIF.
|
||||
|
||||
lv_parent = rv_package.
|
||||
ENDWHILE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_name.
|
||||
|
||||
CONCATENATE 'LCL_OBJECT_' is_item-obj_type INTO rv_class_name. "#EC NOTEXT
|
||||
|
@ -624,7 +595,7 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
* handle namespaces
|
||||
REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'.
|
||||
|
||||
lv_package = path_to_package(
|
||||
lv_package = lcl_folder_logic=>path_to_package(
|
||||
iv_top = io_repo->get_package( )
|
||||
iv_start = io_repo->get_dot_abapgit( )->get_starting_folder( )
|
||||
iv_path = <ls_result>-path ).
|
||||
|
|
|
@ -13,11 +13,6 @@ CLASS lcl_sap_package DEFINITION FINAL.
|
|||
TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY.
|
||||
|
||||
CLASS-METHODS:
|
||||
check
|
||||
IMPORTING io_log TYPE REF TO lcl_log
|
||||
it_results TYPE ty_results_tt
|
||||
iv_start TYPE string
|
||||
iv_top TYPE devclass,
|
||||
list_subpackages IMPORTING iv_package TYPE devclass
|
||||
RETURNING VALUE(rt_list) TYPE ty_devclass_tt,
|
||||
list_superpackages IMPORTING iv_package TYPE devclass
|
||||
|
@ -37,16 +32,6 @@ CLASS lcl_sap_package DEFINITION FINAL.
|
|||
IMPORTING iv_package TYPE devclass
|
||||
RETURNING VALUE(rv_bool) TYPE abap_bool.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CLASS-METHODS:
|
||||
class_to_path
|
||||
IMPORTING
|
||||
iv_top TYPE devclass
|
||||
iv_start TYPE string
|
||||
iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(rv_path) TYPE string.
|
||||
|
||||
ENDCLASS. "lcl_package DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -56,129 +41,6 @@ ENDCLASS. "lcl_package DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_sap_package IMPLEMENTATION.
|
||||
|
||||
METHOD class_to_path.
|
||||
|
||||
DATA: lv_len TYPE i,
|
||||
lv_path TYPE string,
|
||||
lv_parentcl TYPE tdevc-parentcl.
|
||||
|
||||
|
||||
IF iv_top = iv_package.
|
||||
rv_path = iv_start.
|
||||
ELSE.
|
||||
SELECT SINGLE parentcl FROM tdevc INTO lv_parentcl
|
||||
WHERE devclass = iv_package. "#EC CI_SUBRC "#EC CI_GENBUFF
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
IF lv_parentcl IS INITIAL.
|
||||
rv_path = 'error' ##no_text.
|
||||
ELSE.
|
||||
lv_len = strlen( lv_parentcl ).
|
||||
lv_path = iv_package+lv_len.
|
||||
IF strlen( lv_path ) = 0.
|
||||
RETURN. " prevent dump
|
||||
ENDIF.
|
||||
IF lv_path(1) = '_'.
|
||||
lv_path = lv_path+1.
|
||||
ENDIF.
|
||||
TRANSLATE lv_path TO LOWER CASE.
|
||||
CONCATENATE lv_path '/' INTO lv_path.
|
||||
|
||||
rv_path = class_to_path( iv_top = iv_top
|
||||
iv_start = iv_start
|
||||
iv_package = lv_parentcl ).
|
||||
|
||||
CONCATENATE rv_path lv_path INTO rv_path.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "class_to_path
|
||||
|
||||
METHOD check.
|
||||
|
||||
DATA: lv_path TYPE string,
|
||||
ls_item TYPE ty_item,
|
||||
ls_file TYPE ty_file_signature,
|
||||
lt_res_sort LIKE it_results,
|
||||
lt_item_idx LIKE it_results.
|
||||
|
||||
FIELD-SYMBOLS: <ls_res1> LIKE LINE OF it_results,
|
||||
<ls_res2> LIKE LINE OF it_results.
|
||||
|
||||
|
||||
IF io_log IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
" Collect object indexe
|
||||
lt_res_sort = it_results.
|
||||
SORT lt_res_sort BY obj_type ASCENDING obj_name ASCENDING.
|
||||
|
||||
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
|
||||
IF NOT ( <ls_res1>-obj_type = ls_item-obj_type
|
||||
AND <ls_res1>-obj_name = ls_item-obj_name ).
|
||||
APPEND INITIAL LINE TO lt_item_idx ASSIGNING <ls_res2>.
|
||||
<ls_res2>-obj_type = <ls_res1>-obj_type.
|
||||
<ls_res2>-obj_name = <ls_res1>-obj_name.
|
||||
<ls_res2>-path = <ls_res1>-path.
|
||||
MOVE-CORRESPONDING <ls_res1> TO ls_item.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
" Check files for one object is in the same folder
|
||||
|
||||
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
|
||||
READ TABLE lt_item_idx ASSIGNING <ls_res2>
|
||||
WITH KEY obj_type = <ls_res1>-obj_type obj_name = <ls_res1>-obj_name
|
||||
BINARY SEARCH. " Sorted above
|
||||
|
||||
IF sy-subrc <> 0 OR <ls_res1>-path <> <ls_res2>-path. " All paths are same
|
||||
io_log->add( iv_msgv1 = 'Files for object'
|
||||
iv_msgv2 = <ls_res1>-obj_type
|
||||
iv_msgv3 = <ls_res1>-obj_name
|
||||
iv_msgv4 = 'are not placed in the same folder'
|
||||
iv_rc = '1' ) ##no_text.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
" Check that objects are created in package corresponding to folder
|
||||
LOOP AT it_results ASSIGNING <ls_res1>
|
||||
WHERE NOT package IS INITIAL AND NOT path IS INITIAL.
|
||||
lv_path = class_to_path( iv_top = iv_top
|
||||
iv_start = iv_start
|
||||
iv_package = <ls_res1>-package ).
|
||||
IF lv_path <> <ls_res1>-path.
|
||||
io_log->add( iv_msgv1 = 'Package and path does not match for object,'
|
||||
iv_msgv2 = <ls_res1>-obj_type
|
||||
iv_msgv3 = <ls_res1>-obj_name
|
||||
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 <ls_res1>.
|
||||
IF <ls_res1>-filename IS NOT INITIAL AND <ls_res1>-filename = ls_file-filename.
|
||||
io_log->add( iv_msgv1 = 'Multiple files with same filename,'
|
||||
iv_msgv2 = <ls_res1>-filename
|
||||
iv_rc = '3' ) ##no_text.
|
||||
ENDIF.
|
||||
|
||||
IF <ls_res1>-filename IS INITIAL.
|
||||
io_log->add( iv_msgv1 = 'Filename is empty for object'
|
||||
iv_msgv2 = <ls_res1>-obj_type
|
||||
iv_msgv3 = <ls_res1>-obj_name
|
||||
iv_rc = '4' ) ##no_text.
|
||||
ENDIF.
|
||||
|
||||
MOVE-CORRESPONDING <ls_res1> TO ls_file.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD. "check
|
||||
|
||||
METHOD exists.
|
||||
|
||||
cl_package_factory=>load_package(
|
||||
|
|
|
@ -1956,7 +1956,7 @@ CLASS ltcl_file_status IMPLEMENTATION.
|
|||
|
||||
ENDCLASS. "ltcl_file_status
|
||||
|
||||
CLASS ltcl_sap_package DEFINITION
|
||||
CLASS ltcl_file_status2 DEFINITION
|
||||
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
|
||||
INHERITING FROM cl_aunit_assert.
|
||||
|
||||
|
@ -1965,7 +1965,7 @@ CLASS ltcl_sap_package DEFINITION
|
|||
|
||||
ENDCLASS. "ltcl_sap_package
|
||||
|
||||
CLASS ltcl_sap_package IMPLEMENTATION.
|
||||
CLASS ltcl_file_status2 IMPLEMENTATION.
|
||||
|
||||
METHOD check.
|
||||
|
||||
|
@ -1984,10 +1984,10 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
|||
_append_result 'DOMA' 'ZDOMA1' 'X' ' ' ' ' '$Z$' '/' 'zdoma1.doma.xml'.
|
||||
_append_result 'DOMA' 'ZDOMA2' ' ' 'M' ' ' '$Z$' '/' 'zdoma2.doma.xml'.
|
||||
|
||||
lcl_sap_package=>check( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
lcl_file_status=>run_checks( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
|
||||
assert_equals( act = lo_log->count( ) exp = 0 ).
|
||||
|
||||
|
@ -2002,10 +2002,10 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
|||
_append_result 'DOMA' 'ZDOMA1' 'X' ' ' ' ' '$Z$' '/' 'zdoma1.doma.xml'.
|
||||
_append_result 'DOMA' 'ZDOMA2' ' ' 'M' ' ' '$Z$' '/' 'zdoma2.doma.xml'.
|
||||
|
||||
lcl_sap_package=>check( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
lcl_file_status=>run_checks( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
|
||||
" This one is not pure - incorrect path also triggers path vs package check
|
||||
assert_equals( act = lo_log->count( ) exp = 2 ).
|
||||
|
@ -2022,10 +2022,10 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
|||
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/sub' '$$zdoma1.doma.xml'.
|
||||
_append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma2.doma.xml'.
|
||||
|
||||
lcl_sap_package=>check( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
lcl_file_status=>run_checks( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
|
||||
assert_equals( act = lo_log->count( ) exp = 1 ).
|
||||
assert_equals( act = lo_log->has_rc( '2' ) exp = abap_true ).
|
||||
|
@ -2041,10 +2041,10 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
|||
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' '$$zdoma1.doma.xml'.
|
||||
_append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma1.doma.xml'.
|
||||
|
||||
lcl_sap_package=>check( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
lcl_file_status=>run_checks( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
|
||||
assert_equals( act = lo_log->count( ) exp = 1 ).
|
||||
assert_equals( act = lo_log->has_rc( '3' ) exp = abap_true ).
|
||||
|
@ -2059,13 +2059,16 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
|||
_append_result 'CLAS' '$$ZCLASS1' 'X' ' ' ' ' '$Z$' '/' '$$zclass1.clas.xml'.
|
||||
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' ''.
|
||||
|
||||
lcl_sap_package=>check( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
lcl_file_status=>run_checks( io_log = lo_log
|
||||
it_results = lt_results
|
||||
iv_start = '/'
|
||||
iv_top = '$Z$' ).
|
||||
|
||||
assert_equals( act = lo_log->count( ) exp = 1 ).
|
||||
assert_equals( act = lo_log->has_rc( '4' ) exp = abap_true ).
|
||||
assert_equals( act = lo_log->count( )
|
||||
exp = 1 ).
|
||||
|
||||
assert_equals( act = lo_log->has_rc( '4' )
|
||||
exp = abap_true ).
|
||||
|
||||
ENDMETHOD. " check.
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user