mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 21:08:01 +08:00
commit
60a522cdd9
|
@ -4,6 +4,7 @@
|
||||||
<DATA>
|
<DATA>
|
||||||
<MASTER_LANGUAGE>E</MASTER_LANGUAGE>
|
<MASTER_LANGUAGE>E</MASTER_LANGUAGE>
|
||||||
<STARTING_FOLDER>/src/</STARTING_FOLDER>
|
<STARTING_FOLDER>/src/</STARTING_FOLDER>
|
||||||
|
<FOLDER_LOGIC>PREFIX</FOLDER_LOGIC>
|
||||||
<IGNORE>
|
<IGNORE>
|
||||||
<item>/.travis.yml</item>
|
<item>/.travis.yml</item>
|
||||||
<item>/CONTRIBUTING.md</item>
|
<item>/CONTRIBUTING.md</item>
|
||||||
|
|
|
@ -48,6 +48,7 @@ INCLUDE zabapgit_persistence_old.
|
||||||
INCLUDE zabapgit_persistence.
|
INCLUDE zabapgit_persistence.
|
||||||
INCLUDE zabapgit_dot_abapgit.
|
INCLUDE zabapgit_dot_abapgit.
|
||||||
INCLUDE zabapgit_sap_package.
|
INCLUDE zabapgit_sap_package.
|
||||||
|
INCLUDE zabapgit_folder_logic.
|
||||||
|
|
||||||
INCLUDE zabapgit_stage.
|
INCLUDE zabapgit_stage.
|
||||||
INCLUDE zabapgit_git_helpers.
|
INCLUDE zabapgit_git_helpers.
|
||||||
|
|
|
@ -4,6 +4,11 @@
|
||||||
|
|
||||||
CLASS ltcl_dot_abapgit DEFINITION DEFERRED.
|
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.
|
CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
@ -32,6 +37,8 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
|
||||||
iv_filename TYPE string,
|
iv_filename TYPE string,
|
||||||
get_starting_folder
|
get_starting_folder
|
||||||
RETURNING VALUE(rv_path) TYPE string,
|
RETURNING VALUE(rv_path) TYPE string,
|
||||||
|
get_folder_logic
|
||||||
|
RETURNING VALUE(rv_logic) TYPE string,
|
||||||
* set_starting_folder
|
* set_starting_folder
|
||||||
* IMPORTING iv_path TYPE string,
|
* IMPORTING iv_path TYPE string,
|
||||||
get_master_language
|
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,
|
TYPES: BEGIN OF ty_dot_abapgit,
|
||||||
master_language TYPE spras,
|
master_language TYPE spras,
|
||||||
starting_folder TYPE string,
|
starting_folder TYPE string,
|
||||||
|
folder_logic TYPE string,
|
||||||
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||||
END OF ty_dot_abapgit.
|
END OF ty_dot_abapgit.
|
||||||
|
|
||||||
|
@ -105,6 +113,8 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
||||||
|
|
||||||
ls_data-master_language = iv_master_language.
|
ls_data-master_language = iv_master_language.
|
||||||
ls_data-starting_folder = '/'.
|
ls_data-starting_folder = '/'.
|
||||||
|
ls_data-folder_logic = c_folder_logic-prefix.
|
||||||
|
|
||||||
APPEND '/.gitignore' TO ls_data-ignore.
|
APPEND '/.gitignore' TO ls_data-ignore.
|
||||||
APPEND '/LICENSE' TO ls_data-ignore.
|
APPEND '/LICENSE' TO ls_data-ignore.
|
||||||
APPEND '/README.md' TO ls_data-ignore.
|
APPEND '/README.md' TO ls_data-ignore.
|
||||||
|
@ -118,6 +128,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD to_xml.
|
METHOD to_xml.
|
||||||
|
|
||||||
CALL TRANSFORMATION id
|
CALL TRANSFORMATION id
|
||||||
SOURCE data = is_data
|
SOURCE data = is_data
|
||||||
RESULT XML rv_xml.
|
RESULT XML rv_xml.
|
||||||
|
@ -129,6 +140,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
||||||
IN rv_xml
|
IN rv_xml
|
||||||
WITH '<?xml version="1.0" encoding="utf-8"?>'.
|
WITH '<?xml version="1.0" encoding="utf-8"?>'.
|
||||||
ASSERT sy-subrc = 0.
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD from_xml.
|
METHOD from_xml.
|
||||||
|
@ -145,6 +157,12 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
||||||
OPTIONS value_handling = 'accept_data_loss'
|
OPTIONS value_handling = 'accept_data_loss'
|
||||||
SOURCE XML lv_xml
|
SOURCE XML lv_xml
|
||||||
RESULT data = rs_data ##NO_TEXT.
|
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.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD add_ignore.
|
METHOD add_ignore.
|
||||||
|
@ -198,6 +216,10 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
|
||||||
rv_path = ms_data-starting_folder.
|
rv_path = ms_data-starting_folder.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_folder_logic.
|
||||||
|
rv_logic = ms_data-folder_logic.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
* METHOD set_starting_folder.
|
* METHOD set_starting_folder.
|
||||||
* ms_data-starting_folder = iv_path.
|
* ms_data-starting_folder = iv_path.
|
||||||
* ENDMETHOD.
|
* ENDMETHOD.
|
||||||
|
|
|
@ -6,9 +6,10 @@
|
||||||
* CLASS lcl_file_status DEFINITION
|
* CLASS lcl_file_status DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS ltcl_file_status DEFINITION DEFERRED.
|
CLASS ltcl_file_status DEFINITION DEFERRED.
|
||||||
|
CLASS ltcl_file_status2 DEFINITION DEFERRED.
|
||||||
|
|
||||||
CLASS lcl_file_status DEFINITION FINAL
|
CLASS lcl_file_status DEFINITION FINAL
|
||||||
FRIENDS ltcl_file_status.
|
FRIENDS ltcl_file_status ltcl_file_status2.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
@ -20,14 +21,18 @@ CLASS lcl_file_status DEFINITION FINAL
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
CLASS-METHODS calculate_status
|
CLASS-METHODS:
|
||||||
|
calculate_status
|
||||||
IMPORTING iv_devclass TYPE devclass
|
IMPORTING iv_devclass TYPE devclass
|
||||||
it_local TYPE ty_files_item_tt
|
it_local TYPE ty_files_item_tt
|
||||||
it_remote TYPE ty_files_tt
|
it_remote TYPE ty_files_tt
|
||||||
it_cur_state TYPE ty_file_signatures_tt
|
it_cur_state TYPE ty_file_signatures_tt
|
||||||
RETURNING VALUE(rt_results) TYPE ty_results_tt.
|
RETURNING VALUE(rt_results) TYPE ty_results_tt,
|
||||||
|
run_checks
|
||||||
CLASS-METHODS:
|
IMPORTING io_log TYPE REF TO lcl_log
|
||||||
|
it_results TYPE ty_results_tt
|
||||||
|
iv_start TYPE string
|
||||||
|
iv_top TYPE devclass,
|
||||||
build_existing
|
build_existing
|
||||||
IMPORTING is_local TYPE ty_file_item
|
IMPORTING is_local TYPE ty_file_item
|
||||||
is_remote TYPE ty_file
|
is_remote TYPE ty_file
|
||||||
|
@ -54,6 +59,89 @@ ENDCLASS. "lcl_file_status DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_file_status IMPLEMENTATION.
|
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.
|
METHOD status.
|
||||||
|
|
||||||
DATA: lv_index LIKE sy-tabix,
|
DATA: lv_index LIKE sy-tabix,
|
||||||
|
@ -82,7 +170,7 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
lcl_sap_package=>check(
|
run_checks(
|
||||||
io_log = io_log
|
io_log = io_log
|
||||||
it_results = rt_results
|
it_results = rt_results
|
||||||
iv_start = lo_dot_abapgit->get_starting_folder( )
|
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
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
* todo
|
|
||||||
|
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.
|
rv_bool = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
CATCH cx_root.
|
||||||
|
rv_bool = abap_false.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
ENDMETHOD. "lif_object~exists
|
ENDMETHOD. "lif_object~exists
|
||||||
|
|
||||||
METHOD lif_object~jump.
|
METHOD lif_object~jump.
|
||||||
|
|
|
@ -1729,14 +1729,6 @@ CLASS lcl_objects DEFINITION FINAL.
|
||||||
IMPORTING it_results TYPE ty_results_tt
|
IMPORTING it_results TYPE ty_results_tt
|
||||||
RETURNING VALUE(rt_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
|
CLASS-METHODS class_name
|
||||||
IMPORTING is_item TYPE ty_item
|
IMPORTING is_item TYPE ty_item
|
||||||
RETURNING VALUE(rv_class_name) TYPE string.
|
RETURNING VALUE(rv_class_name) TYPE string.
|
||||||
|
|
|
@ -223,35 +223,6 @@ CLASS lcl_objects IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "exists
|
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.
|
METHOD class_name.
|
||||||
|
|
||||||
CONCATENATE 'LCL_OBJECT_' is_item-obj_type INTO rv_class_name. "#EC NOTEXT
|
CONCATENATE 'LCL_OBJECT_' is_item-obj_type INTO rv_class_name. "#EC NOTEXT
|
||||||
|
@ -624,7 +595,7 @@ CLASS lcl_objects IMPLEMENTATION.
|
||||||
* handle namespaces
|
* handle namespaces
|
||||||
REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'.
|
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_top = io_repo->get_package( )
|
||||||
iv_start = io_repo->get_dot_abapgit( )->get_starting_folder( )
|
iv_start = io_repo->get_dot_abapgit( )->get_starting_folder( )
|
||||||
iv_path = <ls_result>-path ).
|
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.
|
TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY.
|
||||||
|
|
||||||
CLASS-METHODS:
|
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
|
list_subpackages IMPORTING iv_package TYPE devclass
|
||||||
RETURNING VALUE(rt_list) TYPE ty_devclass_tt,
|
RETURNING VALUE(rt_list) TYPE ty_devclass_tt,
|
||||||
list_superpackages IMPORTING iv_package TYPE devclass
|
list_superpackages IMPORTING iv_package TYPE devclass
|
||||||
|
@ -37,16 +32,6 @@ CLASS lcl_sap_package DEFINITION FINAL.
|
||||||
IMPORTING iv_package TYPE devclass
|
IMPORTING iv_package TYPE devclass
|
||||||
RETURNING VALUE(rv_bool) TYPE abap_bool.
|
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
|
ENDCLASS. "lcl_package DEFINITION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
@ -56,129 +41,6 @@ ENDCLASS. "lcl_package DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_sap_package IMPLEMENTATION.
|
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.
|
METHOD exists.
|
||||||
|
|
||||||
cl_package_factory=>load_package(
|
cl_package_factory=>load_package(
|
||||||
|
|
|
@ -1956,7 +1956,7 @@ CLASS ltcl_file_status IMPLEMENTATION.
|
||||||
|
|
||||||
ENDCLASS. "ltcl_file_status
|
ENDCLASS. "ltcl_file_status
|
||||||
|
|
||||||
CLASS ltcl_sap_package DEFINITION
|
CLASS ltcl_file_status2 DEFINITION
|
||||||
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
|
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
|
||||||
INHERITING FROM cl_aunit_assert.
|
INHERITING FROM cl_aunit_assert.
|
||||||
|
|
||||||
|
@ -1965,7 +1965,7 @@ CLASS ltcl_sap_package DEFINITION
|
||||||
|
|
||||||
ENDCLASS. "ltcl_sap_package
|
ENDCLASS. "ltcl_sap_package
|
||||||
|
|
||||||
CLASS ltcl_sap_package IMPLEMENTATION.
|
CLASS ltcl_file_status2 IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD check.
|
METHOD check.
|
||||||
|
|
||||||
|
@ -1984,7 +1984,7 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
||||||
_append_result 'DOMA' 'ZDOMA1' 'X' ' ' ' ' '$Z$' '/' 'zdoma1.doma.xml'.
|
_append_result 'DOMA' 'ZDOMA1' 'X' ' ' ' ' '$Z$' '/' 'zdoma1.doma.xml'.
|
||||||
_append_result 'DOMA' 'ZDOMA2' ' ' 'M' ' ' '$Z$' '/' 'zdoma2.doma.xml'.
|
_append_result 'DOMA' 'ZDOMA2' ' ' 'M' ' ' '$Z$' '/' 'zdoma2.doma.xml'.
|
||||||
|
|
||||||
lcl_sap_package=>check( io_log = lo_log
|
lcl_file_status=>run_checks( io_log = lo_log
|
||||||
it_results = lt_results
|
it_results = lt_results
|
||||||
iv_start = '/'
|
iv_start = '/'
|
||||||
iv_top = '$Z$' ).
|
iv_top = '$Z$' ).
|
||||||
|
@ -2002,7 +2002,7 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
||||||
_append_result 'DOMA' 'ZDOMA1' 'X' ' ' ' ' '$Z$' '/' 'zdoma1.doma.xml'.
|
_append_result 'DOMA' 'ZDOMA1' 'X' ' ' ' ' '$Z$' '/' 'zdoma1.doma.xml'.
|
||||||
_append_result 'DOMA' 'ZDOMA2' ' ' 'M' ' ' '$Z$' '/' 'zdoma2.doma.xml'.
|
_append_result 'DOMA' 'ZDOMA2' ' ' 'M' ' ' '$Z$' '/' 'zdoma2.doma.xml'.
|
||||||
|
|
||||||
lcl_sap_package=>check( io_log = lo_log
|
lcl_file_status=>run_checks( io_log = lo_log
|
||||||
it_results = lt_results
|
it_results = lt_results
|
||||||
iv_start = '/'
|
iv_start = '/'
|
||||||
iv_top = '$Z$' ).
|
iv_top = '$Z$' ).
|
||||||
|
@ -2022,7 +2022,7 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
||||||
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/sub' '$$zdoma1.doma.xml'.
|
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/sub' '$$zdoma1.doma.xml'.
|
||||||
_append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma2.doma.xml'.
|
_append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma2.doma.xml'.
|
||||||
|
|
||||||
lcl_sap_package=>check( io_log = lo_log
|
lcl_file_status=>run_checks( io_log = lo_log
|
||||||
it_results = lt_results
|
it_results = lt_results
|
||||||
iv_start = '/'
|
iv_start = '/'
|
||||||
iv_top = '$Z$' ).
|
iv_top = '$Z$' ).
|
||||||
|
@ -2041,7 +2041,7 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
||||||
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' '$$zdoma1.doma.xml'.
|
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' '$$zdoma1.doma.xml'.
|
||||||
_append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma1.doma.xml'.
|
_append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma1.doma.xml'.
|
||||||
|
|
||||||
lcl_sap_package=>check( io_log = lo_log
|
lcl_file_status=>run_checks( io_log = lo_log
|
||||||
it_results = lt_results
|
it_results = lt_results
|
||||||
iv_start = '/'
|
iv_start = '/'
|
||||||
iv_top = '$Z$' ).
|
iv_top = '$Z$' ).
|
||||||
|
@ -2059,13 +2059,16 @@ CLASS ltcl_sap_package IMPLEMENTATION.
|
||||||
_append_result 'CLAS' '$$ZCLASS1' 'X' ' ' ' ' '$Z$' '/' '$$zclass1.clas.xml'.
|
_append_result 'CLAS' '$$ZCLASS1' 'X' ' ' ' ' '$Z$' '/' '$$zclass1.clas.xml'.
|
||||||
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' ''.
|
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' ''.
|
||||||
|
|
||||||
lcl_sap_package=>check( io_log = lo_log
|
lcl_file_status=>run_checks( io_log = lo_log
|
||||||
it_results = lt_results
|
it_results = lt_results
|
||||||
iv_start = '/'
|
iv_start = '/'
|
||||||
iv_top = '$Z$' ).
|
iv_top = '$Z$' ).
|
||||||
|
|
||||||
assert_equals( act = lo_log->count( ) exp = 1 ).
|
assert_equals( act = lo_log->count( )
|
||||||
assert_equals( act = lo_log->has_rc( '4' ) exp = abap_true ).
|
exp = 1 ).
|
||||||
|
|
||||||
|
assert_equals( act = lo_log->has_rc( '4' )
|
||||||
|
exp = abap_true ).
|
||||||
|
|
||||||
ENDMETHOD. " check.
|
ENDMETHOD. " check.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user