From b69ce81f1bb3d4de134e6f341eabbc5ec61396a8 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Thu, 15 Dec 2022 12:43:55 -0500 Subject: [PATCH] Add "ignore sub-packages" option for offline repos (#5948) --- .../zcl_abapgit_repo_content_list.clas.abap | 6 +- src/repo/zcl_abapgit_repo_srv.clas.abap | 81 ++++++++++--------- src/repo/zif_abapgit_repo_srv.intf.abap | 1 + .../zcl_abapgit_gui_page_addofflin.clas.abap | 54 +++++++------ 4 files changed, 79 insertions(+), 63 deletions(-) diff --git a/src/repo/zcl_abapgit_repo_content_list.clas.abap b/src/repo/zcl_abapgit_repo_content_list.clas.abap index 149a5c4cf..471c7d894 100644 --- a/src/repo/zcl_abapgit_repo_content_list.clas.abap +++ b/src/repo/zcl_abapgit_repo_content_list.clas.abap @@ -122,8 +122,10 @@ CLASS zcl_abapgit_repo_content_list IMPLEMENTATION. lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( - iv_package = mo_repo->get_package( ) - io_dot = mo_repo->get_dot_abapgit( ) ). + iv_package = mo_repo->get_package( ) + iv_ignore_subpackages = mo_repo->get_local_settings( )-ignore_subpackages + iv_only_local_objects = mo_repo->get_local_settings( )-only_local_objects + io_dot = mo_repo->get_dot_abapgit( ) ). LOOP AT lt_tadir ASSIGNING . APPEND INITIAL LINE TO rt_repo_items ASSIGNING . diff --git a/src/repo/zcl_abapgit_repo_srv.clas.abap b/src/repo/zcl_abapgit_repo_srv.clas.abap index e85ca8fd0..91ba8023b 100644 --- a/src/repo/zcl_abapgit_repo_srv.clas.abap +++ b/src/repo/zcl_abapgit_repo_srv.clas.abap @@ -331,6 +331,38 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_repo_srv~get_label_list. + + DATA: + lt_repo TYPE zif_abapgit_repo_srv=>ty_repo_list, + ls_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings, + lt_labels TYPE string_table, + ls_label LIKE LINE OF rt_labels. + + FIELD-SYMBOLS: + TYPE REF TO zif_abapgit_repo, + TYPE LINE OF string_table. + + lt_repo = zif_abapgit_repo_srv~list( ). + + LOOP AT lt_repo ASSIGNING . + + ls_local_settings = ->get_local_settings( ). + lt_labels = zcl_abapgit_repo_labels=>split( ls_local_settings-labels ). + + LOOP AT lt_labels ASSIGNING . + ls_label-label = . + INSERT ls_label INTO TABLE rt_labels. + ENDLOOP. + + ENDLOOP. + + SORT rt_labels. + DELETE ADJACENT DUPLICATES FROM rt_labels. + + ENDMETHOD. + + METHOD zif_abapgit_repo_srv~get_repo_from_package. DATA: @@ -488,7 +520,9 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. zcx_abapgit_exception=>raise( 'Not authorized' ). ENDIF. - zif_abapgit_repo_srv~validate_package( iv_package ). + zif_abapgit_repo_srv~validate_package( + iv_package = iv_package + iv_ign_subpkg = iv_ign_subpkg ). IF iv_url IS INITIAL. zcx_abapgit_exception=>raise( 'Missing display name for repo' ). @@ -512,8 +546,12 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. lo_repo ?= instantiate_and_add( ls_repo ). + IF ls_repo-local_settings-ignore_subpackages <> iv_ign_subpkg. + ls_repo-local_settings-ignore_subpackages = iv_ign_subpkg. + ENDIF. ls_repo-local_settings-main_language_only = iv_main_lang_only. ls_repo-local_settings-labels = iv_labels. + lo_repo->set_local_settings( ls_repo-local_settings ). lo_repo->check_and_create_package( iv_package ). @@ -541,8 +579,9 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. zcx_abapgit_exception=>raise( 'Not authorized' ). ENDIF. - zif_abapgit_repo_srv~validate_package( iv_package = iv_package - iv_ign_subpkg = iv_ign_subpkg ). + zif_abapgit_repo_srv~validate_package( + iv_package = iv_package + iv_ign_subpkg = iv_ign_subpkg ). zif_abapgit_repo_srv~validate_url( lv_url ). @@ -560,6 +599,7 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. iv_package = iv_package iv_offline = abap_false is_dot_abapgit = ls_dot_abapgit ). + TRY. ls_repo = zcl_abapgit_persist_factory=>get_repo( )->read( lv_key ). CATCH zcx_abapgit_not_found. @@ -573,8 +613,8 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. ENDIF. ls_repo-local_settings-main_language_only = iv_main_lang_only. ls_repo-local_settings-labels = iv_labels. - lo_repo->set_local_settings( ls_repo-local_settings ). + lo_repo->set_local_settings( ls_repo-local_settings ). lo_repo->refresh( ). lo_repo->find_remote_dot_abapgit( ). lo_repo->check_and_create_package( iv_package ). @@ -676,37 +716,4 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. ENDIF. ENDMETHOD. - - - METHOD zif_abapgit_repo_srv~get_label_list. - - DATA: - lt_repo TYPE zif_abapgit_repo_srv=>ty_repo_list, - ls_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings, - lt_labels TYPE string_table, - ls_label LIKE LINE OF rt_labels. - - FIELD-SYMBOLS: - TYPE REF TO zif_abapgit_repo, - TYPE LINE OF string_table. - - lt_repo = zif_abapgit_repo_srv~list( ). - - LOOP AT lt_repo ASSIGNING . - - ls_local_settings = ->get_local_settings( ). - lt_labels = zcl_abapgit_repo_labels=>split( ls_local_settings-labels ). - - LOOP AT lt_labels ASSIGNING . - ls_label-label = . - INSERT ls_label INTO TABLE rt_labels. - ENDLOOP. - - ENDLOOP. - - SORT rt_labels. - DELETE ADJACENT DUPLICATES FROM rt_labels. - - ENDMETHOD. - ENDCLASS. diff --git a/src/repo/zif_abapgit_repo_srv.intf.abap b/src/repo/zif_abapgit_repo_srv.intf.abap index 3f06af797..fc8303f97 100644 --- a/src/repo/zif_abapgit_repo_srv.intf.abap +++ b/src/repo/zif_abapgit_repo_srv.intf.abap @@ -48,6 +48,7 @@ INTERFACE zif_abapgit_repo_srv !iv_package TYPE devclass !iv_folder_logic TYPE string DEFAULT zif_abapgit_dot_abapgit=>c_folder_logic-full !iv_labels TYPE string OPTIONAL + !iv_ign_subpkg TYPE abap_bool DEFAULT abap_false !iv_main_lang_only TYPE abap_bool DEFAULT abap_false RETURNING VALUE(ri_repo) TYPE REF TO zif_abapgit_repo diff --git a/src/ui/pages/zcl_abapgit_gui_page_addofflin.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_addofflin.clas.abap index e3b520deb..0ecf9e2b4 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_addofflin.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_addofflin.clas.abap @@ -24,11 +24,12 @@ CLASS zcl_abapgit_gui_page_addofflin DEFINITION CONSTANTS: BEGIN OF c_id, - url TYPE string VALUE 'url', - package TYPE string VALUE 'package', - folder_logic TYPE string VALUE 'folder_logic', - labels TYPE string VALUE 'labels', - main_lang_only TYPE string VALUE 'main_lang_only', + url TYPE string VALUE 'url', + package TYPE string VALUE 'package', + folder_logic TYPE string VALUE 'folder_logic', + labels TYPE string VALUE 'labels', + ignore_subpackages TYPE string VALUE 'ignore_subpackages', + main_lang_only TYPE string VALUE 'main_lang_only', END OF c_id . CONSTANTS: @@ -68,6 +69,23 @@ ENDCLASS. CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. + METHOD choose_labels. + + DATA: + lv_old_labels TYPE string, + lv_new_labels TYPE string. + + lv_old_labels = mo_form_data->get( c_id-labels ). + + lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ). + + mo_form_data->set( + iv_key = c_id-labels + iv_val = lv_new_labels ). + + ENDMETHOD. + + METHOD constructor. super->constructor( ). CREATE OBJECT mo_validation_log. @@ -128,6 +146,10 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. iv_side_action = c_event-choose_labels iv_label = |Labels (comma-separated, allowed chars: "{ zcl_abapgit_repo_labels=>c_allowed_chars }")| iv_hint = 'Comma-separated labels for grouping and repo organization (optional)' + )->checkbox( + iv_name = c_id-ignore_subpackages + iv_label = 'Ignore Subpackages' + iv_hint = 'Synchronize root package only' )->checkbox( iv_name = c_id-main_lang_only iv_label = 'Serialize Main Language Only' @@ -154,7 +176,9 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. IF io_form_data->get( c_id-package ) IS NOT INITIAL. TRY. - zcl_abapgit_repo_srv=>get_instance( )->validate_package( |{ io_form_data->get( c_id-package ) }| ). + zcl_abapgit_repo_srv=>get_instance( )->validate_package( + iv_package = |{ io_form_data->get( c_id-package ) }| + iv_ign_subpkg = |{ io_form_data->get( c_id-ignore_subpackages ) }| ). CATCH zcx_abapgit_exception INTO lx_err. ro_validation_log->set( iv_key = c_id-package @@ -255,22 +279,4 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. ri_html->add( '' ). ENDMETHOD. - - - METHOD choose_labels. - - DATA: - lv_old_labels TYPE string, - lv_new_labels TYPE string. - - lv_old_labels = mo_form_data->get( c_id-labels ). - - lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ). - - mo_form_data->set( - iv_key = c_id-labels - iv_val = lv_new_labels ). - - ENDMETHOD. - ENDCLASS.