diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index f2e72b9b3..3085ed1db 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -25,6 +25,7 @@ CLASS lcl_dot_abapgit DEFINITION FINAL FRIENDS ltcl_dot_abapgit. ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY, requirements TYPE ty_requirement_tt, advanced_packages TYPE abap_bool, + original_package TYPE devclass, END OF ty_dot_abapgit. CLASS-METHODS: @@ -71,7 +72,11 @@ CLASS lcl_dot_abapgit DEFINITION FINAL FRIENDS ltcl_dot_abapgit. uses_advanced_packages RETURNING VALUE(rv_advanced_packages) TYPE abap_bool, 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. DATA: ms_data TYPE ty_dot_abapgit. @@ -280,4 +285,12 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. ms_data-advanced_packages = iv_use_advanced_packages. ENDMETHOD. + METHOD get_original_package. + rv_package = ms_data-original_package. + ENDMETHOD. + + METHOD set_original_package. + ms_data-original_package = iv_package. + ENDMETHOD. + ENDCLASS. diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 3b2698f9d..458ac1c4e 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -164,8 +164,14 @@ CLASS lcl_file_status IMPLEMENTATION. IF lo_dot_abapgit->is_ignored( iv_path = -path - iv_filename = -filename ) = abap_true. "OR -obj_type = 'DEVC' ##TODO. + iv_filename = -filename ) = abap_true. DELETE rt_results INDEX lv_index. + CONTINUE. + ENDIF. + + IF -obj_type = 'DEVC'. + CLEAR -package. " Needs to be cleared, otherwise later an assertion fails, which + " checks the installation package. ENDIF. ENDLOOP. @@ -224,7 +230,6 @@ CLASS lcl_file_status IMPLEMENTATION. ev_is_xml = lv_is_xml ). 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( iv_object = ls_item-obj_type diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 24a9a42d3..96e2e89f2 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -8,19 +8,20 @@ CLASS lcl_folder_logic DEFINITION. CLASS-METHODS: package_to_path IMPORTING - iv_top TYPE devclass - io_dot TYPE REF TO lcl_dot_abapgit - iv_package TYPE devclass - RETURNING - VALUE(rv_path) TYPE string + iv_top TYPE devclass + io_dot TYPE REF TO lcl_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 lcl_dot_abapgit - iv_path TYPE string + iv_top TYPE devclass + io_dot TYPE REF TO lcl_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 + VALUE(rv_package) TYPE devclass RAISING zcx_abapgit_exception. @@ -33,16 +34,24 @@ CLASS lcl_folder_logic IMPLEMENTATION. DATA: lv_length TYPE i, lv_parent TYPE devclass, 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( ) ). IF lv_length > strlen( iv_path ). zcx_abapgit_exception=>raise( 'unexpected folder structure' ). ENDIF. lv_path = iv_path+lv_length. - lv_parent = iv_top. - rv_package = iv_top. + lv_parent = lv_top. + rv_package = lv_top. WHILE lv_path CA '/'. SPLIT lv_path AT '/' INTO lv_new lv_path. @@ -62,14 +71,15 @@ CLASS lcl_folder_logic IMPLEMENTATION. 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 ). ENDIF. lv_parent = rv_package. ENDWHILE. - ENDMETHOD. METHOD package_to_path. @@ -79,7 +89,6 @@ CLASS lcl_folder_logic IMPLEMENTATION. lv_message TYPE string, lv_parentcl TYPE tdevc-parentcl. - IF iv_top = iv_package. rv_path = io_dot->get_starting_folder( ). ELSE. @@ -137,13 +146,13 @@ 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. + 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. diff --git a/src/zabapgit_object_devc.prog.abap b/src/zabapgit_object_devc.prog.abap index 440466609..62a48c24e 100644 --- a/src/zabapgit_object_devc.prog.abap +++ b/src/zabapgit_object_devc.prog.abap @@ -27,9 +27,9 @@ CLASS lcl_object_devc DEFINITION iv_lock TYPE abap_bool RAISING lcx_exception. DATA: - mv_local_devclass TYPE devclass, - mv_repo_devclass TYPE devclass, - mv_installation_package TYPE devclass. + mv_local_devclass TYPE devclass, + mv_repo_devclass TYPE devclass, + mv_is_installation_package TYPE abap_bool. ENDCLASS. CLASS lcl_object_devc IMPLEMENTATION. @@ -149,30 +149,36 @@ CLASS lcl_object_devc IMPLEMENTATION. CHANGING 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? -* 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 * IF mv_installation_package <> ls_package_data-devclass. * " The package is serialized under a different name -> change it * ls_package_data-devclass = mv_installation_package. * mv_local_devclass = mv_installation_package. * ENDIF. -* ENDIF. + ENDIF. 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. - 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-korrflag = abap_true. ls_data_sign-as4user = 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-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-intfprefx = abap_true. ls_data_sign-packtype = abap_true. @@ -232,6 +238,7 @@ CLASS lcl_object_devc IMPLEMENTATION. ELSE. " 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( IMPORTING e_package = li_package @@ -297,7 +304,8 @@ CLASS lcl_object_devc IMPLEMENTATION. ENDMETHOD. 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( EXPORTING i_package_name = mv_local_devclass @@ -362,9 +370,9 @@ CLASS lcl_object_devc IMPLEMENTATION. ENDIF. ls_package_data-devclass = mv_repo_devclass. - IF mv_local_devclass = mv_installation_package. ##TODO - CLEAR ls_package_data-parentcl. - ENDIF. +* IF mv_is_installation_package = abap_true. + CLEAR ls_package_data-parentcl. +* ENDIF. " Clear administrative data to prevent diffs CLEAR: ls_package_data-created_by, @@ -377,6 +385,12 @@ CLASS lcl_object_devc IMPLEMENTATION. CLEAR: ls_package_data-comp_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 ). " Save package interface usages @@ -403,6 +417,14 @@ CLASS lcl_object_devc IMPLEMENTATION. lcx_exception=>raise( |Error from IF_PACKAGE_PERMISSION_TO_USE->GET_ALL_ATTRIBUTES { sy-subrc }| ). 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. ENDLOOP. diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index bbc7ffff4..1090eab9a 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -222,8 +222,8 @@ CLASS lcl_tadir IMPLEMENTATION. lt_tdevc TYPE STANDARD TABLE OF tdevc, lv_path TYPE string, lo_skip_objects TYPE REF TO lcl_skip_objects, - lt_excludes TYPE RANGE OF trobjtype, - ls_exclude LIKE LINE OF lt_excludes. + lt_excludes TYPE RANGE OF trobjtype, + ls_exclude LIKE LINE OF lt_excludes. FIELD-SYMBOLS: LIKE LINE OF lt_tdevc, LIKE LINE OF rt_tadir. @@ -240,11 +240,10 @@ CLASS lcl_tadir IMPLEMENTATION. ls_exclude-low = 'STOB'. " auto generated by core data services APPEND ls_exclude TO lt_excludes. - ##TODO. -* IF sy-uname <> 'DEVELOPER' AND io_dot IS NOT BOUND OR io_dot->uses_advanced_packages( ) = abap_false. -* ls_exclude-low = 'DEVC'. -* APPEND ls_exclude TO lt_excludes. -* ENDIF. + IF io_dot IS NOT BOUND OR io_dot->uses_advanced_packages( ) = abap_false. + ls_exclude-low = 'DEVC'. + APPEND ls_exclude TO lt_excludes. + ENDIF. SELECT * FROM tadir INTO CORRESPONDING FIELDS OF TABLE rt_tadir @@ -259,6 +258,16 @@ CLASS lcl_tadir IMPLEMENTATION. it_tadir = rt_tadir 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 . + -pgmid = 'R3TR'. + -object = 'DEVC'. + -obj_name = iv_package. + -devclass = iv_package. + ENDIF. + IF NOT io_dot IS INITIAL. lv_path = lcl_folder_logic=>package_to_path( 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. IF io_dot IS BOUND. -obj_name = lcl_folder_logic=>path_to_package( - iv_top = iv_top - io_dot = io_dot - iv_path = lv_path ). + iv_top = iv_top + io_dot = io_dot + iv_path = lv_path + iv_local_path = abap_false + iv_create_if_not_exists = abap_false ). ENDIF. ENDCASE.