Update local package mapping

This commit is contained in:
Fabian Lupa 2017-09-17 15:43:59 +02:00
parent b5e1345e8b
commit f384330357
5 changed files with 108 additions and 48 deletions

View File

@ -25,6 +25,7 @@ CLASS lcl_dot_abapgit DEFINITION FINAL FRIENDS ltcl_dot_abapgit.
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY, ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
requirements TYPE ty_requirement_tt, requirements TYPE ty_requirement_tt,
advanced_packages TYPE abap_bool, advanced_packages TYPE abap_bool,
original_package TYPE devclass,
END OF ty_dot_abapgit. END OF ty_dot_abapgit.
CLASS-METHODS: CLASS-METHODS:
@ -71,7 +72,11 @@ CLASS lcl_dot_abapgit DEFINITION FINAL FRIENDS ltcl_dot_abapgit.
uses_advanced_packages uses_advanced_packages
RETURNING VALUE(rv_advanced_packages) TYPE abap_bool, RETURNING VALUE(rv_advanced_packages) TYPE abap_bool,
set_advanced_packages set_advanced_packages
IMPORTING iv_use_advanced_packages TYPE abap_bool. IMPORTING iv_use_advanced_packages TYPE abap_bool,
get_original_package
RETURNING VALUE(rv_package) TYPE devclass,
set_original_package
IMPORTING iv_package TYPE devclass.
PRIVATE SECTION. PRIVATE SECTION.
DATA: ms_data TYPE ty_dot_abapgit. DATA: ms_data TYPE ty_dot_abapgit.
@ -280,4 +285,12 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
ms_data-advanced_packages = iv_use_advanced_packages. ms_data-advanced_packages = iv_use_advanced_packages.
ENDMETHOD. ENDMETHOD.
METHOD get_original_package.
rv_package = ms_data-original_package.
ENDMETHOD.
METHOD set_original_package.
ms_data-original_package = iv_package.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -164,8 +164,14 @@ CLASS lcl_file_status IMPLEMENTATION.
IF lo_dot_abapgit->is_ignored( IF lo_dot_abapgit->is_ignored(
iv_path = <ls_result>-path iv_path = <ls_result>-path
iv_filename = <ls_result>-filename ) = abap_true. "OR <ls_result>-obj_type = 'DEVC' ##TODO. iv_filename = <ls_result>-filename ) = abap_true.
DELETE rt_results INDEX lv_index. DELETE rt_results INDEX lv_index.
CONTINUE.
ENDIF.
IF <ls_result>-obj_type = 'DEVC'.
CLEAR <ls_result>-package. " Needs to be cleared, otherwise later an assertion fails, which
" checks the installation package.
ENDIF. ENDIF.
ENDLOOP. ENDLOOP.
@ -224,7 +230,6 @@ CLASS lcl_file_status IMPLEMENTATION.
ev_is_xml = lv_is_xml ). ev_is_xml = lv_is_xml ).
CHECK lv_is_xml = abap_true. " Skip all but obj definitions CHECK lv_is_xml = abap_true. " Skip all but obj definitions
CHECK ls_item-obj_type <> 'DEVC' ##TODO.
ls_item-devclass = lcl_tadir=>get_object_package( ls_item-devclass = lcl_tadir=>get_object_package(
iv_object = ls_item-obj_type iv_object = ls_item-obj_type

View File

@ -8,19 +8,20 @@ CLASS lcl_folder_logic DEFINITION.
CLASS-METHODS: CLASS-METHODS:
package_to_path package_to_path
IMPORTING IMPORTING
iv_top TYPE devclass iv_top TYPE devclass
io_dot TYPE REF TO lcl_dot_abapgit io_dot TYPE REF TO lcl_dot_abapgit
iv_package TYPE devclass iv_package TYPE devclass
RETURNING RETURNING VALUE(rv_path) TYPE string
VALUE(rv_path) TYPE string
RAISING zcx_abapgit_exception, RAISING zcx_abapgit_exception,
path_to_package path_to_package
IMPORTING IMPORTING
iv_top TYPE devclass iv_top TYPE devclass
io_dot TYPE REF TO lcl_dot_abapgit io_dot TYPE REF TO lcl_dot_abapgit
iv_path TYPE string 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 RETURNING
VALUE(rv_package) TYPE devclass VALUE(rv_package) TYPE devclass
RAISING RAISING
zcx_abapgit_exception. zcx_abapgit_exception.
@ -33,16 +34,24 @@ CLASS lcl_folder_logic IMPLEMENTATION.
DATA: lv_length TYPE i, DATA: lv_length TYPE i,
lv_parent TYPE devclass, lv_parent TYPE devclass,
lv_new TYPE string, lv_new TYPE string,
lv_path TYPE string. lv_path TYPE string,
lv_top TYPE devclass.
lv_top = iv_top.
IF iv_local_path = abap_false AND io_dot->uses_advanced_packages( ) = abap_true AND
io_dot->get_original_package( ) <> lv_top.
lv_top = io_dot->get_original_package( ).
ENDIF.
lv_length = strlen( io_dot->get_starting_folder( ) ). lv_length = strlen( io_dot->get_starting_folder( ) ).
IF lv_length > strlen( iv_path ). IF lv_length > strlen( iv_path ).
zcx_abapgit_exception=>raise( 'unexpected folder structure' ). zcx_abapgit_exception=>raise( 'unexpected folder structure' ).
ENDIF. ENDIF.
lv_path = iv_path+lv_length. lv_path = iv_path+lv_length.
lv_parent = iv_top. lv_parent = lv_top.
rv_package = iv_top. rv_package = lv_top.
WHILE lv_path CA '/'. WHILE lv_path CA '/'.
SPLIT lv_path AT '/' INTO lv_new lv_path. SPLIT lv_path AT '/' INTO lv_new lv_path.
@ -62,14 +71,15 @@ CLASS lcl_folder_logic IMPLEMENTATION.
TRANSLATE rv_package TO UPPER CASE. TRANSLATE rv_package TO UPPER CASE.
IF lcl_sap_package=>get( rv_package )->exists( ) = abap_false. IF lcl_sap_package=>get( rv_package )->exists( ) = abap_false AND
iv_create_if_not_exists = abap_true.
lcl_sap_package=>get( lv_parent )->create_child( rv_package ). lcl_sap_package=>get( lv_parent )->create_child( rv_package ).
ENDIF. ENDIF.
lv_parent = rv_package. lv_parent = rv_package.
ENDWHILE. ENDWHILE.
ENDMETHOD. ENDMETHOD.
METHOD package_to_path. METHOD package_to_path.
@ -79,7 +89,6 @@ CLASS lcl_folder_logic IMPLEMENTATION.
lv_message TYPE string, lv_message TYPE string,
lv_parentcl TYPE tdevc-parentcl. lv_parentcl TYPE tdevc-parentcl.
IF iv_top = iv_package. IF iv_top = iv_package.
rv_path = io_dot->get_starting_folder( ). rv_path = io_dot->get_starting_folder( ).
ELSE. ELSE.
@ -137,13 +146,13 @@ CLASS ltcl_folder_logic_helper DEFINITION FOR TESTING FINAL.
PUBLIC SECTION. PUBLIC SECTION.
CLASS-METHODS: test CLASS-METHODS: test
IMPORTING IMPORTING
iv_starting TYPE string iv_starting TYPE string
iv_top TYPE devclass iv_top TYPE devclass
iv_logic TYPE string iv_logic TYPE string
iv_package TYPE devclass iv_package TYPE devclass
iv_path TYPE string iv_path TYPE string
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception.
ENDCLASS. ENDCLASS.

View File

@ -27,9 +27,9 @@ CLASS lcl_object_devc DEFINITION
iv_lock TYPE abap_bool iv_lock TYPE abap_bool
RAISING lcx_exception. RAISING lcx_exception.
DATA: DATA:
mv_local_devclass TYPE devclass, mv_local_devclass TYPE devclass,
mv_repo_devclass TYPE devclass, mv_repo_devclass TYPE devclass,
mv_installation_package TYPE devclass. mv_is_installation_package TYPE abap_bool.
ENDCLASS. ENDCLASS.
CLASS lcl_object_devc IMPLEMENTATION. CLASS lcl_object_devc IMPLEMENTATION.
@ -149,30 +149,36 @@ CLASS lcl_object_devc IMPLEMENTATION.
CHANGING CHANGING
cg_data = ls_package_data ). cg_data = ls_package_data ).
* mv_local_devclass = mv_local_devclass. ASSERT mv_repo_devclass = ls_package_data-devclass.
" Is it the top level package? " Is it the top level package?
* IF ls_package_data-parentcl IS INITIAL. IF ls_package_data-parentcl IS INITIAL.
mv_is_installation_package = abap_true.
* " Check if the local installation package has a different name * " Check if the local installation package has a different name
* IF mv_installation_package <> ls_package_data-devclass. * IF mv_installation_package <> ls_package_data-devclass.
* " The package is serialized under a different name -> change it * " The package is serialized under a different name -> change it
* ls_package_data-devclass = mv_installation_package. * ls_package_data-devclass = mv_installation_package.
* mv_local_devclass = mv_installation_package. * mv_local_devclass = mv_installation_package.
* ENDIF. * ENDIF.
* ENDIF. ENDIF.
li_package = get_package( mv_local_devclass ). li_package = get_package( mv_local_devclass ).
" Swap out repository package name with the local installation package name
ls_package_data-devclass = mv_local_devclass. ls_package_data-devclass = mv_local_devclass.
CLEAR ls_package_data-parentcl. ##TODO "
" Parent package is not changed. Assume the folder logic already created the package and set
" the hierarchy before.
CLEAR ls_package_data-parentcl.
ls_data_sign-ctext = abap_true. ls_data_sign-ctext = abap_true.
* ls_data_sign-korrflag = abap_true. * ls_data_sign-korrflag = abap_true.
ls_data_sign-as4user = abap_true. ls_data_sign-as4user = abap_true.
ls_data_sign-pdevclass = abap_true. ls_data_sign-pdevclass = abap_true.
ls_data_sign-dlvunit = abap_true. * ls_data_sign-dlvunit = abap_true.
ls_data_sign-comp_posid = abap_true. ls_data_sign-comp_posid = abap_true.
ls_data_sign-component = abap_true. ls_data_sign-component = abap_true.
* ls_data_sign-parentcl = abap_true. * ls_data_sign-parentcl = abap_true. " No parent package change here
ls_data_sign-perminher = abap_true. ls_data_sign-perminher = abap_true.
ls_data_sign-intfprefx = abap_true. ls_data_sign-intfprefx = abap_true.
ls_data_sign-packtype = abap_true. ls_data_sign-packtype = abap_true.
@ -232,6 +238,7 @@ CLASS lcl_object_devc IMPLEMENTATION.
ELSE. ELSE.
" Package does not exist yet, create it " Package does not exist yet, create it
" This shouldn't really happen, because the folder logic initially creates the packages.
cl_package_factory=>create_new_package( cl_package_factory=>create_new_package(
IMPORTING IMPORTING
e_package = li_package e_package = li_package
@ -297,7 +304,8 @@ CLASS lcl_object_devc IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD lif_object~exists. METHOD lif_object~exists.
ASSERT mv_local_devclass IS NOT INITIAL ##TODO. ASSERT mv_local_devclass IS NOT INITIAL.
cl_package_helper=>check_package_existence( cl_package_helper=>check_package_existence(
EXPORTING EXPORTING
i_package_name = mv_local_devclass i_package_name = mv_local_devclass
@ -362,9 +370,9 @@ CLASS lcl_object_devc IMPLEMENTATION.
ENDIF. ENDIF.
ls_package_data-devclass = mv_repo_devclass. ls_package_data-devclass = mv_repo_devclass.
IF mv_local_devclass = mv_installation_package. ##TODO * IF mv_is_installation_package = abap_true.
CLEAR ls_package_data-parentcl. CLEAR ls_package_data-parentcl.
ENDIF. * ENDIF.
" Clear administrative data to prevent diffs " Clear administrative data to prevent diffs
CLEAR: ls_package_data-created_by, CLEAR: ls_package_data-created_by,
@ -377,6 +385,12 @@ CLASS lcl_object_devc IMPLEMENTATION.
CLEAR: ls_package_data-comp_text, CLEAR: ls_package_data-comp_text,
ls_package_data-dlvu_text. ls_package_data-dlvu_text.
" Clear things related to local installation package
CLEAR: ls_package_data-namespace,
ls_package_data-dlvunit.
CLEAR: ls_package_data-korrflag.
io_xml->add( iv_name = 'DEVC' ig_data = ls_package_data ). io_xml->add( iv_name = 'DEVC' ig_data = ls_package_data ).
" Save package interface usages " Save package interface usages
@ -403,6 +417,14 @@ CLASS lcl_object_devc IMPLEMENTATION.
lcx_exception=>raise( lcx_exception=>raise(
|Error from IF_PACKAGE_PERMISSION_TO_USE->GET_ALL_ATTRIBUTES { sy-subrc }| ). |Error from IF_PACKAGE_PERMISSION_TO_USE->GET_ALL_ATTRIBUTES { sy-subrc }| ).
ENDIF. ENDIF.
" Swap the package name
ls_usage_data-client_pak = mv_repo_devclass.
" The name of the package where the interface belongs to is also retrieved, but should not
" be serialized because it may be a local package name and not the 'original' one. The
" package interface name should be unique enough anyways.
CLEAR ls_usage_data-pack_name.
APPEND ls_usage_data TO lt_usage_data. APPEND ls_usage_data TO lt_usage_data.
ENDLOOP. ENDLOOP.

View File

@ -222,8 +222,8 @@ CLASS lcl_tadir IMPLEMENTATION.
lt_tdevc TYPE STANDARD TABLE OF tdevc, lt_tdevc TYPE STANDARD TABLE OF tdevc,
lv_path TYPE string, lv_path TYPE string,
lo_skip_objects TYPE REF TO lcl_skip_objects, lo_skip_objects TYPE REF TO lcl_skip_objects,
lt_excludes TYPE RANGE OF trobjtype, lt_excludes TYPE RANGE OF trobjtype,
ls_exclude LIKE LINE OF lt_excludes. ls_exclude LIKE LINE OF lt_excludes.
FIELD-SYMBOLS: <ls_tdevc> LIKE LINE OF lt_tdevc, FIELD-SYMBOLS: <ls_tdevc> LIKE LINE OF lt_tdevc,
<ls_tadir> LIKE LINE OF rt_tadir. <ls_tadir> LIKE LINE OF rt_tadir.
@ -240,11 +240,10 @@ CLASS lcl_tadir IMPLEMENTATION.
ls_exclude-low = 'STOB'. " auto generated by core data services ls_exclude-low = 'STOB'. " auto generated by core data services
APPEND ls_exclude TO lt_excludes. APPEND ls_exclude TO lt_excludes.
##TODO. IF io_dot IS NOT BOUND OR io_dot->uses_advanced_packages( ) = abap_false.
* IF sy-uname <> 'DEVELOPER' AND io_dot IS NOT BOUND OR io_dot->uses_advanced_packages( ) = abap_false. ls_exclude-low = 'DEVC'.
* ls_exclude-low = 'DEVC'. APPEND ls_exclude TO lt_excludes.
* APPEND ls_exclude TO lt_excludes. ENDIF.
* ENDIF.
SELECT * FROM tadir SELECT * FROM tadir
INTO CORRESPONDING FIELDS OF TABLE rt_tadir INTO CORRESPONDING FIELDS OF TABLE rt_tadir
@ -259,6 +258,16 @@ CLASS lcl_tadir IMPLEMENTATION.
it_tadir = rt_tadir it_tadir = rt_tadir
io_log = io_log ). io_log = io_log ).
" Local packages are not in TADIR, only in TDEVC, act as if they were
IF io_dot->uses_advanced_packages( ) = abap_true AND
( iv_package CP '$*' ). " OR iv_package CP 'T*' ).
APPEND INITIAL LINE TO rt_tadir ASSIGNING <ls_tadir>.
<ls_tadir>-pgmid = 'R3TR'.
<ls_tadir>-object = 'DEVC'.
<ls_tadir>-obj_name = iv_package.
<ls_tadir>-devclass = iv_package.
ENDIF.
IF NOT io_dot IS INITIAL. IF NOT io_dot IS INITIAL.
lv_path = lcl_folder_logic=>package_to_path( lv_path = lcl_folder_logic=>package_to_path(
iv_top = iv_top iv_top = iv_top
@ -278,9 +287,11 @@ CLASS lcl_tadir IMPLEMENTATION.
" The package on this system might be named differently to the one in the repository. " The package on this system might be named differently to the one in the repository.
IF io_dot IS BOUND. IF io_dot IS BOUND.
<ls_tadir>-obj_name = lcl_folder_logic=>path_to_package( <ls_tadir>-obj_name = lcl_folder_logic=>path_to_package(
iv_top = iv_top iv_top = iv_top
io_dot = io_dot io_dot = io_dot
iv_path = lv_path ). iv_path = lv_path
iv_local_path = abap_false
iv_create_if_not_exists = abap_false ).
ENDIF. ENDIF.
ENDCASE. ENDCASE.