mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
lcl_folder_logic to global
lcl_folder_logic to global
This commit is contained in:
parent
d03abc6836
commit
fd82e770bd
|
@ -117,9 +117,10 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
" Check that objects are created in package corresponding to folder
|
" Check that objects are created in package corresponding to folder
|
||||||
LOOP AT it_results ASSIGNING <ls_res1>
|
LOOP AT it_results ASSIGNING <ls_res1>
|
||||||
WHERE NOT package IS INITIAL AND NOT path IS INITIAL.
|
WHERE NOT package IS INITIAL AND NOT path IS INITIAL.
|
||||||
lv_path = lcl_folder_logic=>package_to_path( iv_top = iv_top
|
lv_path = zcl_abapgit_folder_logic=>package_to_path(
|
||||||
io_dot = io_dot
|
iv_top = iv_top
|
||||||
iv_package = <ls_res1>-package ).
|
io_dot = io_dot
|
||||||
|
iv_package = <ls_res1>-package ).
|
||||||
IF lv_path <> <ls_res1>-path.
|
IF lv_path <> <ls_res1>-path.
|
||||||
io_log->add( iv_msg = |Package and path does not match for object, {
|
io_log->add( iv_msg = |Package and path does not match for object, {
|
||||||
<ls_res1>-obj_type } { <ls_res1>-obj_name }|
|
<ls_res1>-obj_type } { <ls_res1>-obj_name }|
|
||||||
|
@ -281,9 +282,10 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
" Try to get a unique package name for DEVC by using the path
|
" Try to get a unique package name for DEVC by using the path
|
||||||
IF lv_type = 'DEVC'.
|
IF lv_type = 'DEVC'.
|
||||||
ASSERT lv_name = 'PACKAGE'.
|
ASSERT lv_name = 'PACKAGE'.
|
||||||
lv_name = lcl_folder_logic=>path_to_package( iv_top = iv_devclass
|
lv_name = zcl_abapgit_folder_logic=>path_to_package(
|
||||||
io_dot = io_dot
|
iv_top = iv_devclass
|
||||||
iv_path = iv_path ).
|
io_dot = io_dot
|
||||||
|
iv_path = iv_path ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
CLEAR es_item.
|
CLEAR es_item.
|
||||||
|
|
|
@ -2,407 +2,4 @@
|
||||||
*& Include ZABAPGIT_FOLDER_LOGIC
|
*& Include ZABAPGIT_FOLDER_LOGIC
|
||||||
*&---------------------------------------------------------------------*
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
CLASS lcl_folder_logic DEFINITION.
|
* todo, include to be deleted
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
CLASS-METHODS:
|
|
||||||
package_to_path
|
|
||||||
IMPORTING
|
|
||||||
iv_top TYPE devclass
|
|
||||||
io_dot TYPE REF TO zcl_abapgit_dot_abapgit
|
|
||||||
iv_package TYPE devclass
|
|
||||||
RETURNING VALUE(rv_path) TYPE string
|
|
||||||
RAISING zcx_abapgit_exception,
|
|
||||||
path_to_package
|
|
||||||
IMPORTING
|
|
||||||
iv_top TYPE devclass
|
|
||||||
io_dot TYPE REF TO zcl_abapgit_dot_abapgit
|
|
||||||
iv_path TYPE string
|
|
||||||
iv_create_if_not_exists TYPE abap_bool DEFAULT abap_true
|
|
||||||
* iv_local_path TYPE abap_bool DEFAULT abap_true
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_package) TYPE devclass
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_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_top TYPE devclass.
|
|
||||||
|
|
||||||
lv_top = iv_top.
|
|
||||||
|
|
||||||
lv_length = strlen( io_dot->get_starting_folder( ) ).
|
|
||||||
IF lv_length > strlen( iv_path ).
|
|
||||||
zcx_abapgit_exception=>raise( 'unexpected folder structure' ).
|
|
||||||
ENDIF.
|
|
||||||
lv_path = iv_path+lv_length.
|
|
||||||
lv_parent = lv_top.
|
|
||||||
rv_package = lv_top.
|
|
||||||
|
|
||||||
WHILE lv_path CA '/'.
|
|
||||||
SPLIT lv_path AT '/' INTO lv_new lv_path.
|
|
||||||
|
|
||||||
CASE io_dot->get_folder_logic( ).
|
|
||||||
WHEN zif_abapgit_dot_abapgit=>c_folder_logic-full.
|
|
||||||
rv_package = lv_new.
|
|
||||||
TRANSLATE rv_package USING '#/'.
|
|
||||||
IF iv_top(1) = '$'.
|
|
||||||
CONCATENATE '$' rv_package INTO rv_package.
|
|
||||||
ENDIF.
|
|
||||||
WHEN zif_abapgit_dot_abapgit=>c_folder_logic-prefix.
|
|
||||||
CONCATENATE rv_package '_' lv_new INTO rv_package.
|
|
||||||
WHEN OTHERS.
|
|
||||||
ASSERT 0 = 1.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
TRANSLATE rv_package TO UPPER CASE.
|
|
||||||
|
|
||||||
IF zcl_abapgit_sap_package=>get( rv_package )->exists( ) = abap_false AND
|
|
||||||
iv_create_if_not_exists = abap_true.
|
|
||||||
|
|
||||||
zcl_abapgit_sap_package=>get( lv_parent )->create_child( rv_package ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lv_parent = rv_package.
|
|
||||||
ENDWHILE.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD package_to_path.
|
|
||||||
|
|
||||||
DATA: lv_len TYPE i,
|
|
||||||
lv_path TYPE string,
|
|
||||||
lv_message TYPE string,
|
|
||||||
lv_parentcl TYPE tdevc-parentcl.
|
|
||||||
|
|
||||||
IF iv_top = iv_package.
|
|
||||||
rv_path = io_dot->get_starting_folder( ).
|
|
||||||
ELSE.
|
|
||||||
lv_parentcl = zcl_abapgit_sap_package=>get( iv_package )->read_parent( ).
|
|
||||||
|
|
||||||
IF lv_parentcl IS INITIAL.
|
|
||||||
zcx_abapgit_exception=>raise( |error, expected parent package, { iv_package }| ).
|
|
||||||
ELSE.
|
|
||||||
CASE io_dot->get_folder_logic( ).
|
|
||||||
WHEN zif_abapgit_dot_abapgit=>c_folder_logic-full.
|
|
||||||
lv_len = 0.
|
|
||||||
IF iv_package(1) = '$'.
|
|
||||||
lv_len = 1.
|
|
||||||
ENDIF.
|
|
||||||
WHEN zif_abapgit_dot_abapgit=>c_folder_logic-prefix.
|
|
||||||
lv_len = strlen( lv_parentcl ).
|
|
||||||
|
|
||||||
IF iv_package(lv_len) <> lv_parentcl.
|
|
||||||
* if abapGit project is installed in package ZZZ, all subpackages should be named
|
|
||||||
* ZZZ_something. This will define the folder name in the zip file to be "something",
|
|
||||||
* similarily with online projects. Alternatively change to FULL folder logic
|
|
||||||
lv_message = 'PREFIX: Unexpected package naming(' && iv_package && ')' ##no_text.
|
|
||||||
zcx_abapgit_exception=>raise( lv_message ).
|
|
||||||
ENDIF.
|
|
||||||
WHEN OTHERS.
|
|
||||||
ASSERT 0 = 1.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
lv_path = iv_package+lv_len.
|
|
||||||
IF strlen( lv_path ) = 0.
|
|
||||||
zcx_abapgit_exception=>raise( |Folder logic: length = 0, parent: {
|
|
||||||
lv_parentcl }, child: { iv_package }| ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF lv_path(1) = '_'.
|
|
||||||
lv_path = lv_path+1.
|
|
||||||
ENDIF.
|
|
||||||
IF strlen( lv_path ) = 0.
|
|
||||||
zcx_abapgit_exception=>raise( |Folder logic: length = 0, parent: {
|
|
||||||
lv_parentcl }, child: { iv_package }| ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
TRANSLATE lv_path USING '/#'.
|
|
||||||
TRANSLATE lv_path TO LOWER CASE.
|
|
||||||
CONCATENATE lv_path '/' INTO lv_path.
|
|
||||||
|
|
||||||
rv_path = package_to_path( iv_top = iv_top
|
|
||||||
io_dot = io_dot
|
|
||||||
iv_package = lv_parentcl ).
|
|
||||||
|
|
||||||
CONCATENATE rv_path lv_path INTO rv_path.
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "class_to_path
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS ltcl_folder_logic_helper DEFINITION FOR TESTING FINAL.
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
CLASS-METHODS: test
|
|
||||||
IMPORTING
|
|
||||||
iv_starting TYPE string
|
|
||||||
iv_top TYPE devclass
|
|
||||||
iv_logic TYPE string
|
|
||||||
iv_package TYPE devclass
|
|
||||||
iv_path TYPE string
|
|
||||||
RAISING zcx_abapgit_exception.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS ltcl_folder_logic_helper IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD test.
|
|
||||||
|
|
||||||
DATA: lv_path TYPE string,
|
|
||||||
lv_package TYPE devclass,
|
|
||||||
lo_dot TYPE REF TO zcl_abapgit_dot_abapgit.
|
|
||||||
|
|
||||||
|
|
||||||
lo_dot = zcl_abapgit_dot_abapgit=>build_default( ).
|
|
||||||
lo_dot->set_starting_folder( iv_starting ).
|
|
||||||
lo_dot->set_folder_logic( iv_logic ).
|
|
||||||
|
|
||||||
lv_package = lcl_folder_logic=>path_to_package(
|
|
||||||
iv_top = iv_top
|
|
||||||
io_dot = lo_dot
|
|
||||||
iv_path = iv_path ).
|
|
||||||
|
|
||||||
lv_path = lcl_folder_logic=>package_to_path(
|
|
||||||
iv_top = iv_top
|
|
||||||
io_dot = lo_dot
|
|
||||||
iv_package = iv_package ).
|
|
||||||
|
|
||||||
cl_abap_unit_assert=>assert_equals(
|
|
||||||
act = lv_package
|
|
||||||
exp = iv_package ).
|
|
||||||
|
|
||||||
cl_abap_unit_assert=>assert_equals(
|
|
||||||
act = lv_path
|
|
||||||
exp = iv_path ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
INTERFACES: zif_abapgit_sap_package.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
|
||||||
CONSTANTS: lc_top TYPE devclass VALUE '$TOP',
|
|
||||||
lc_src TYPE string VALUE '/src/'.
|
|
||||||
|
|
||||||
METHODS:
|
|
||||||
setup,
|
|
||||||
teardown,
|
|
||||||
prefix1 FOR TESTING RAISING zcx_abapgit_exception,
|
|
||||||
prefix2 FOR TESTING RAISING zcx_abapgit_exception,
|
|
||||||
prefix_error1 FOR TESTING RAISING zcx_abapgit_exception,
|
|
||||||
full1 FOR TESTING RAISING zcx_abapgit_exception,
|
|
||||||
full2 FOR TESTING RAISING zcx_abapgit_exception.
|
|
||||||
|
|
||||||
ENDCLASS. "ltcl_convert DEFINITION
|
|
||||||
|
|
||||||
CLASS ltcl_folder_logic IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~list_subpackages.
|
|
||||||
RETURN.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~list_superpackages.
|
|
||||||
RETURN.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~read_parent.
|
|
||||||
rv_parentcl = '$TOP'.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~create_child.
|
|
||||||
RETURN.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~exists.
|
|
||||||
rv_bool = abap_true.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD setup.
|
|
||||||
FIELD-SYMBOLS: <ls_inject> LIKE LINE OF zcl_abapgit_sap_package=>gt_injected.
|
|
||||||
|
|
||||||
CLEAR zcl_abapgit_sap_package=>gt_injected.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
|
||||||
<ls_inject>-package = '$TOP'.
|
|
||||||
<ls_inject>-object = me.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
|
||||||
<ls_inject>-package = '$TOP_FOO'.
|
|
||||||
<ls_inject>-object = me.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
|
||||||
<ls_inject>-package = '$FOOBAR'.
|
|
||||||
<ls_inject>-object = me.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD teardown.
|
|
||||||
CLEAR zcl_abapgit_sap_package=>gt_injected.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD prefix1.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
|
||||||
iv_package = lc_top
|
|
||||||
iv_path = lc_src ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD prefix2.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
|
||||||
iv_package = '$TOP_FOO'
|
|
||||||
iv_path = '/src/foo/' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD prefix_error1.
|
|
||||||
* PREFIX mode, top package is $TOP, so all subpackages should be named $TOP_something
|
|
||||||
TRY.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
|
||||||
iv_package = '$FOOBAR'
|
|
||||||
iv_path = '/src/' ).
|
|
||||||
cl_abap_unit_assert=>fail( 'Error expected' ).
|
|
||||||
CATCH zcx_abapgit_exception ##NO_HANDLER.
|
|
||||||
ENDTRY.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD full1.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full
|
|
||||||
iv_package = lc_top
|
|
||||||
iv_path = lc_src ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD full2.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full
|
|
||||||
iv_package = '$TOP_FOO'
|
|
||||||
iv_path = '/src/top_foo/' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS ltcl_folder_logic_namespaces DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
|
||||||
|
|
||||||
PUBLIC SECTION.
|
|
||||||
INTERFACES: zif_abapgit_sap_package.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
|
||||||
CONSTANTS: lc_top TYPE devclass VALUE '/TEST/TOOLS',
|
|
||||||
lc_src TYPE string VALUE '/src/'.
|
|
||||||
|
|
||||||
METHODS:
|
|
||||||
setup,
|
|
||||||
teardown,
|
|
||||||
prefix1 FOR TESTING RAISING zcx_abapgit_exception,
|
|
||||||
prefix2 FOR TESTING RAISING zcx_abapgit_exception,
|
|
||||||
full1 FOR TESTING RAISING zcx_abapgit_exception,
|
|
||||||
full2 FOR TESTING RAISING zcx_abapgit_exception.
|
|
||||||
|
|
||||||
ENDCLASS. "ltcl_convert DEFINITION
|
|
||||||
|
|
||||||
CLASS ltcl_folder_logic_namespaces IMPLEMENTATION.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~list_subpackages.
|
|
||||||
RETURN.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~list_superpackages.
|
|
||||||
RETURN.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~read_parent.
|
|
||||||
rv_parentcl = lc_top.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~create_child.
|
|
||||||
RETURN.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD zif_abapgit_sap_package~exists.
|
|
||||||
rv_bool = abap_true.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD setup.
|
|
||||||
FIELD-SYMBOLS: <ls_inject> LIKE LINE OF zcl_abapgit_sap_package=>gt_injected.
|
|
||||||
|
|
||||||
CLEAR zcl_abapgit_sap_package=>gt_injected.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
|
||||||
<ls_inject>-package = '/TEST/TOOLS'.
|
|
||||||
<ls_inject>-object = me.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
|
||||||
<ls_inject>-package = '/TEST/T1'.
|
|
||||||
<ls_inject>-object = me.
|
|
||||||
|
|
||||||
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
|
||||||
<ls_inject>-package = '/TEST/TOOLS_T1'.
|
|
||||||
<ls_inject>-object = me.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD teardown.
|
|
||||||
CLEAR zcl_abapgit_sap_package=>gt_injected.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD prefix1.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
|
||||||
iv_package = lc_top
|
|
||||||
iv_path = lc_src ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD prefix2.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
|
||||||
iv_package = '/TEST/TOOLS_T1'
|
|
||||||
iv_path = '/src/t1/' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD full1.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full
|
|
||||||
iv_package = lc_top
|
|
||||||
iv_path = lc_src ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD full2.
|
|
||||||
ltcl_folder_logic_helper=>test(
|
|
||||||
iv_starting = lc_src
|
|
||||||
iv_top = lc_top
|
|
||||||
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full
|
|
||||||
iv_package = '/TEST/T1'
|
|
||||||
iv_path = '/src/#test#t1/' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
|
@ -470,7 +470,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 = lcl_folder_logic=>path_to_package(
|
lv_package = zcl_abapgit_folder_logic=>path_to_package(
|
||||||
iv_top = io_repo->get_package( )
|
iv_top = io_repo->get_package( )
|
||||||
io_dot = io_repo->get_dot_abapgit( )
|
io_dot = io_repo->get_dot_abapgit( )
|
||||||
iv_path = <ls_result>-path ).
|
iv_path = <ls_result>-path ).
|
||||||
|
|
|
@ -261,7 +261,7 @@ CLASS lcl_tadir IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF NOT io_dot IS INITIAL.
|
IF NOT io_dot IS INITIAL.
|
||||||
lv_path = lcl_folder_logic=>package_to_path(
|
lv_path = zcl_abapgit_folder_logic=>package_to_path(
|
||||||
iv_top = iv_top
|
iv_top = iv_top
|
||||||
io_dot = io_dot
|
io_dot = io_dot
|
||||||
iv_package = iv_package ).
|
iv_package = iv_package ).
|
||||||
|
|
143
src/zcl_abapgit_folder_logic.clas.abap
Normal file
143
src/zcl_abapgit_folder_logic.clas.abap
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
CLASS zcl_abapgit_folder_logic DEFINITION
|
||||||
|
PUBLIC
|
||||||
|
CREATE PUBLIC .
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
CLASS-METHODS package_to_path
|
||||||
|
IMPORTING
|
||||||
|
!iv_top TYPE devclass
|
||||||
|
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
|
||||||
|
!iv_package TYPE devclass
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_path) TYPE string
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
CLASS-METHODS path_to_package
|
||||||
|
IMPORTING
|
||||||
|
!iv_top TYPE devclass
|
||||||
|
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
|
||||||
|
!iv_path TYPE string
|
||||||
|
!iv_create_if_not_exists TYPE abap_bool DEFAULT abap_true
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_package) TYPE devclass
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLASS ZCL_ABAPGIT_FOLDER_LOGIC IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD package_to_path.
|
||||||
|
|
||||||
|
DATA: lv_len TYPE i,
|
||||||
|
lv_path TYPE string,
|
||||||
|
lv_message TYPE string,
|
||||||
|
lv_parentcl TYPE tdevc-parentcl.
|
||||||
|
|
||||||
|
IF iv_top = iv_package.
|
||||||
|
rv_path = io_dot->get_starting_folder( ).
|
||||||
|
ELSE.
|
||||||
|
lv_parentcl = zcl_abapgit_sap_package=>get( iv_package )->read_parent( ).
|
||||||
|
|
||||||
|
IF lv_parentcl IS INITIAL.
|
||||||
|
zcx_abapgit_exception=>raise( |error, expected parent package, { iv_package }| ).
|
||||||
|
ELSE.
|
||||||
|
CASE io_dot->get_folder_logic( ).
|
||||||
|
WHEN zif_abapgit_dot_abapgit=>c_folder_logic-full.
|
||||||
|
lv_len = 0.
|
||||||
|
IF iv_package(1) = '$'.
|
||||||
|
lv_len = 1.
|
||||||
|
ENDIF.
|
||||||
|
WHEN zif_abapgit_dot_abapgit=>c_folder_logic-prefix.
|
||||||
|
lv_len = strlen( lv_parentcl ).
|
||||||
|
|
||||||
|
IF iv_package(lv_len) <> lv_parentcl.
|
||||||
|
* if abapGit project is installed in package ZZZ, all subpackages should be named
|
||||||
|
* ZZZ_something. This will define the folder name in the zip file to be "something",
|
||||||
|
* similarily with online projects. Alternatively change to FULL folder logic
|
||||||
|
lv_message = 'PREFIX: Unexpected package naming(' && iv_package && ')' ##no_text.
|
||||||
|
zcx_abapgit_exception=>raise( lv_message ).
|
||||||
|
ENDIF.
|
||||||
|
WHEN OTHERS.
|
||||||
|
ASSERT 0 = 1.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
lv_path = iv_package+lv_len.
|
||||||
|
IF strlen( lv_path ) = 0.
|
||||||
|
zcx_abapgit_exception=>raise( |Folder logic: length = 0, parent: {
|
||||||
|
lv_parentcl }, child: { iv_package }| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lv_path(1) = '_'.
|
||||||
|
lv_path = lv_path+1.
|
||||||
|
ENDIF.
|
||||||
|
IF strlen( lv_path ) = 0.
|
||||||
|
zcx_abapgit_exception=>raise( |Folder logic: length = 0, parent: {
|
||||||
|
lv_parentcl }, child: { iv_package }| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
TRANSLATE lv_path USING '/#'.
|
||||||
|
TRANSLATE lv_path TO LOWER CASE.
|
||||||
|
CONCATENATE lv_path '/' INTO lv_path.
|
||||||
|
|
||||||
|
rv_path = package_to_path( iv_top = iv_top
|
||||||
|
io_dot = io_dot
|
||||||
|
iv_package = lv_parentcl ).
|
||||||
|
|
||||||
|
CONCATENATE rv_path lv_path INTO rv_path.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "class_to_path
|
||||||
|
|
||||||
|
|
||||||
|
METHOD path_to_package.
|
||||||
|
|
||||||
|
DATA: lv_length TYPE i,
|
||||||
|
lv_parent TYPE devclass,
|
||||||
|
lv_new TYPE string,
|
||||||
|
lv_path TYPE string,
|
||||||
|
lv_top TYPE devclass.
|
||||||
|
|
||||||
|
lv_top = iv_top.
|
||||||
|
|
||||||
|
lv_length = strlen( io_dot->get_starting_folder( ) ).
|
||||||
|
IF lv_length > strlen( iv_path ).
|
||||||
|
zcx_abapgit_exception=>raise( 'unexpected folder structure' ).
|
||||||
|
ENDIF.
|
||||||
|
lv_path = iv_path+lv_length.
|
||||||
|
lv_parent = lv_top.
|
||||||
|
rv_package = lv_top.
|
||||||
|
|
||||||
|
WHILE lv_path CA '/'.
|
||||||
|
SPLIT lv_path AT '/' INTO lv_new lv_path.
|
||||||
|
|
||||||
|
CASE io_dot->get_folder_logic( ).
|
||||||
|
WHEN zif_abapgit_dot_abapgit=>c_folder_logic-full.
|
||||||
|
rv_package = lv_new.
|
||||||
|
TRANSLATE rv_package USING '#/'.
|
||||||
|
IF iv_top(1) = '$'.
|
||||||
|
CONCATENATE '$' rv_package INTO rv_package.
|
||||||
|
ENDIF.
|
||||||
|
WHEN zif_abapgit_dot_abapgit=>c_folder_logic-prefix.
|
||||||
|
CONCATENATE rv_package '_' lv_new INTO rv_package.
|
||||||
|
WHEN OTHERS.
|
||||||
|
ASSERT 0 = 1.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
TRANSLATE rv_package TO UPPER CASE.
|
||||||
|
|
||||||
|
IF zcl_abapgit_sap_package=>get( rv_package )->exists( ) = abap_false AND
|
||||||
|
iv_create_if_not_exists = abap_true.
|
||||||
|
|
||||||
|
zcl_abapgit_sap_package=>get( lv_parent )->create_child( rv_package ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_parent = rv_package.
|
||||||
|
ENDWHILE.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
265
src/zcl_abapgit_folder_logic.clas.testclasses.abap
Normal file
265
src/zcl_abapgit_folder_logic.clas.testclasses.abap
Normal file
|
@ -0,0 +1,265 @@
|
||||||
|
CLASS ltcl_folder_logic_helper DEFINITION FOR TESTING FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS: test
|
||||||
|
IMPORTING
|
||||||
|
iv_starting TYPE string
|
||||||
|
iv_top TYPE devclass
|
||||||
|
iv_logic TYPE string
|
||||||
|
iv_package TYPE devclass
|
||||||
|
iv_path TYPE string
|
||||||
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_folder_logic_helper IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD test.
|
||||||
|
|
||||||
|
DATA: lv_path TYPE string,
|
||||||
|
lv_package TYPE devclass,
|
||||||
|
lo_dot TYPE REF TO zcl_abapgit_dot_abapgit.
|
||||||
|
|
||||||
|
|
||||||
|
lo_dot = zcl_abapgit_dot_abapgit=>build_default( ).
|
||||||
|
lo_dot->set_starting_folder( iv_starting ).
|
||||||
|
lo_dot->set_folder_logic( iv_logic ).
|
||||||
|
|
||||||
|
lv_package = zcl_abapgit_folder_logic=>path_to_package(
|
||||||
|
iv_top = iv_top
|
||||||
|
io_dot = lo_dot
|
||||||
|
iv_path = iv_path ).
|
||||||
|
|
||||||
|
lv_path = zcl_abapgit_folder_logic=>package_to_path(
|
||||||
|
iv_top = iv_top
|
||||||
|
io_dot = lo_dot
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_equals(
|
||||||
|
act = lv_package
|
||||||
|
exp = iv_package ).
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_equals(
|
||||||
|
act = lv_path
|
||||||
|
exp = iv_path ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES: zif_abapgit_sap_package.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
CONSTANTS: lc_top TYPE devclass VALUE '$TOP',
|
||||||
|
lc_src TYPE string VALUE '/src/'.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
setup,
|
||||||
|
teardown,
|
||||||
|
prefix1 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
|
prefix2 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
|
prefix_error1 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
|
full1 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
|
full2 FOR TESTING RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
ENDCLASS. "ltcl_convert DEFINITION
|
||||||
|
|
||||||
|
CLASS ltcl_folder_logic IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~list_subpackages.
|
||||||
|
RETURN.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~list_superpackages.
|
||||||
|
RETURN.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~read_parent.
|
||||||
|
rv_parentcl = '$TOP'.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~create_child.
|
||||||
|
RETURN.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~exists.
|
||||||
|
rv_bool = abap_true.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD setup.
|
||||||
|
FIELD-SYMBOLS: <ls_inject> LIKE LINE OF zcl_abapgit_sap_package=>gt_injected.
|
||||||
|
|
||||||
|
CLEAR zcl_abapgit_sap_package=>gt_injected.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
||||||
|
<ls_inject>-package = '$TOP'.
|
||||||
|
<ls_inject>-object = me.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
||||||
|
<ls_inject>-package = '$TOP_FOO'.
|
||||||
|
<ls_inject>-object = me.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
||||||
|
<ls_inject>-package = '$FOOBAR'.
|
||||||
|
<ls_inject>-object = me.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD teardown.
|
||||||
|
CLEAR zcl_abapgit_sap_package=>gt_injected.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD prefix1.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
||||||
|
iv_package = lc_top
|
||||||
|
iv_path = lc_src ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD prefix2.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
||||||
|
iv_package = '$TOP_FOO'
|
||||||
|
iv_path = '/src/foo/' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD prefix_error1.
|
||||||
|
* PREFIX mode, top package is $TOP, so all subpackages should be named $TOP_something
|
||||||
|
TRY.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
||||||
|
iv_package = '$FOOBAR'
|
||||||
|
iv_path = '/src/' ).
|
||||||
|
cl_abap_unit_assert=>fail( 'Error expected' ).
|
||||||
|
CATCH zcx_abapgit_exception ##NO_HANDLER.
|
||||||
|
ENDTRY.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD full1.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full
|
||||||
|
iv_package = lc_top
|
||||||
|
iv_path = lc_src ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD full2.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full
|
||||||
|
iv_package = '$TOP_FOO'
|
||||||
|
iv_path = '/src/top_foo/' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_folder_logic_namespaces DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES: zif_abapgit_sap_package.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
CONSTANTS: lc_top TYPE devclass VALUE '/TEST/TOOLS',
|
||||||
|
lc_src TYPE string VALUE '/src/'.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
setup,
|
||||||
|
teardown,
|
||||||
|
prefix1 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
|
prefix2 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
|
full1 FOR TESTING RAISING zcx_abapgit_exception,
|
||||||
|
full2 FOR TESTING RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
ENDCLASS. "ltcl_convert DEFINITION
|
||||||
|
|
||||||
|
CLASS ltcl_folder_logic_namespaces IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~list_subpackages.
|
||||||
|
RETURN.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~list_superpackages.
|
||||||
|
RETURN.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~read_parent.
|
||||||
|
rv_parentcl = lc_top.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~create_child.
|
||||||
|
RETURN.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD zif_abapgit_sap_package~exists.
|
||||||
|
rv_bool = abap_true.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD setup.
|
||||||
|
FIELD-SYMBOLS: <ls_inject> LIKE LINE OF zcl_abapgit_sap_package=>gt_injected.
|
||||||
|
|
||||||
|
CLEAR zcl_abapgit_sap_package=>gt_injected.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
||||||
|
<ls_inject>-package = '/TEST/TOOLS'.
|
||||||
|
<ls_inject>-object = me.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
||||||
|
<ls_inject>-package = '/TEST/T1'.
|
||||||
|
<ls_inject>-object = me.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING <ls_inject>.
|
||||||
|
<ls_inject>-package = '/TEST/TOOLS_T1'.
|
||||||
|
<ls_inject>-object = me.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD teardown.
|
||||||
|
CLEAR zcl_abapgit_sap_package=>gt_injected.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD prefix1.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
||||||
|
iv_package = lc_top
|
||||||
|
iv_path = lc_src ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD prefix2.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix
|
||||||
|
iv_package = '/TEST/TOOLS_T1'
|
||||||
|
iv_path = '/src/t1/' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD full1.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full
|
||||||
|
iv_package = lc_top
|
||||||
|
iv_path = lc_src ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD full2.
|
||||||
|
ltcl_folder_logic_helper=>test(
|
||||||
|
iv_starting = lc_src
|
||||||
|
iv_top = lc_top
|
||||||
|
iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full
|
||||||
|
iv_package = '/TEST/T1'
|
||||||
|
iv_path = '/src/#test#t1/' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
19
src/zcl_abapgit_folder_logic.clas.xml
Normal file
19
src/zcl_abapgit_folder_logic.clas.xml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_FOLDER_LOGIC</CLSNAME>
|
||||||
|
<VERSION>1</VERSION>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>Folder logic</DESCRIPT>
|
||||||
|
<EXPOSURE>2</EXPOSURE>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
Loading…
Reference in New Issue
Block a user