From 43db85ea380fd800fdef6771086e3d73a90ac94b Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Tue, 22 Aug 2023 00:41:41 -0400 Subject: [PATCH] Move `check_and_create_package` to repo services (#6410) Co-authored-by: Lars Hvam --- src/repo/zcl_abapgit_repo.clas.abap | 50 +++-------- src/repo/zcl_abapgit_repo_srv.clas.abap | 3 +- .../zcl_abapgit_gui_page_addofflin.clas.abap | 4 +- .../zcl_abapgit_gui_page_addonline.clas.abap | 2 +- .../zcl_abapgit_services_basis.clas.abap | 66 --------------- .../zcl_abapgit_services_basis.clas.xml | 17 ---- .../zcl_abapgit_services_repo.clas.abap | 83 ++++++++++++++++++- ...apgit_services_repo.clas.testclasses.abap} | 5 +- .../zcl_abapgit_services_repo.clas.xml | 1 + 9 files changed, 99 insertions(+), 132 deletions(-) delete mode 100644 src/ui/routing/zcl_abapgit_services_basis.clas.abap delete mode 100644 src/ui/routing/zcl_abapgit_services_basis.clas.xml rename src/ui/routing/{zcl_abapgit_services_basis.clas.testclasses.abap => zcl_abapgit_services_repo.clas.testclasses.abap} (97%) diff --git a/src/repo/zcl_abapgit_repo.clas.abap b/src/repo/zcl_abapgit_repo.clas.abap index 8e9f8efa9..ab7aaae1f 100644 --- a/src/repo/zcl_abapgit_repo.clas.abap +++ b/src/repo/zcl_abapgit_repo.clas.abap @@ -37,11 +37,6 @@ CLASS zcl_abapgit_repo DEFINITION METHODS bind_listener IMPORTING !ii_listener TYPE REF TO zif_abapgit_repo_listener . - METHODS check_and_create_package - IMPORTING - !iv_package TYPE devclass - RAISING - zcx_abapgit_exception . METHODS constructor IMPORTING !is_data TYPE zif_abapgit_persistence=>ty_repo . @@ -199,7 +194,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. +CLASS zcl_abapgit_repo IMPLEMENTATION. METHOD bind_listener. @@ -207,28 +202,18 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. ENDMETHOD. - METHOD check_and_create_package. + METHOD check_abap_language_version. - DATA ls_item TYPE zif_abapgit_definitions=>ty_item. - DATA lv_package TYPE devclass. + DATA lo_abapgit_abap_language_vers TYPE REF TO zcl_abapgit_abap_language_vers. + DATA lv_text TYPE string. + CREATE OBJECT lo_abapgit_abap_language_vers. - ls_item-obj_type = 'DEVC'. - ls_item-obj_name = iv_package. - - IF zcl_abapgit_objects=>exists( ls_item ) = abap_false. - " Check if any package is included in remote - READ TABLE mt_remote TRANSPORTING NO FIELDS - WITH KEY file - COMPONENTS filename = zcl_abapgit_filename_logic=>c_package_file. - IF sy-subrc <> 0. - " If not, prompt to create it - lv_package = zcl_abapgit_services_basis=>create_package( iv_package ). - IF lv_package IS NOT INITIAL. - COMMIT WORK AND WAIT. - ENDIF. - ENDIF. + IF lo_abapgit_abap_language_vers->is_import_allowed( io_repo = me + iv_package = ms_data-package ) = abap_false. + lv_text = |Repository cannot be imported. | && + |ABAP Language Version of linked package is not compatible with repository settings.|. + zcx_abapgit_exception=>raise( iv_text = lv_text ). ENDIF. - ENDMETHOD. @@ -922,19 +907,4 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. METHOD zif_abapgit_repo~set_dot_abapgit. set( is_dot_abapgit = io_dot_abapgit->get_data( ) ). ENDMETHOD. - - - METHOD check_abap_language_version. - - DATA lo_abapgit_abap_language_vers TYPE REF TO zcl_abapgit_abap_language_vers. - DATA lv_text TYPE string. - CREATE OBJECT lo_abapgit_abap_language_vers. - - IF lo_abapgit_abap_language_vers->is_import_allowed( io_repo = me - iv_package = ms_data-package ) = abap_false. - lv_text = |Repository cannot be imported. | && - |ABAP Language Version of linked package is not compatible with repository settings.|. - zcx_abapgit_exception=>raise( iv_text = lv_text ). - ENDIF. - ENDMETHOD. ENDCLASS. diff --git a/src/repo/zcl_abapgit_repo_srv.clas.abap b/src/repo/zcl_abapgit_repo_srv.clas.abap index 956934da1..9cae55059 100644 --- a/src/repo/zcl_abapgit_repo_srv.clas.abap +++ b/src/repo/zcl_abapgit_repo_srv.clas.abap @@ -553,7 +553,6 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. ls_repo-local_settings-labels = iv_labels. lo_repo->set_local_settings( ls_repo-local_settings ). - lo_repo->check_and_create_package( iv_package ). ri_repo = lo_repo. @@ -615,9 +614,9 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. ls_repo-local_settings-labels = iv_labels. 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 ). ri_repo = lo_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 11c776711..213f0e3d9 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_addofflin.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_addofflin.clas.abap @@ -66,7 +66,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_GUI_PAGE_ADDOFFLIN IMPLEMENTATION. +CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION. METHOD choose_labels. @@ -220,7 +220,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDOFFLIN IMPLEMENTATION. mo_form_data->set( iv_key = c_id-package - iv_val = zcl_abapgit_services_basis=>create_package( + iv_val = zcl_abapgit_services_repo=>create_package( iv_prefill_package = |{ mo_form_data->get( c_id-package ) }| ) ). IF mo_form_data->get( c_id-package ) IS NOT INITIAL. mo_validation_log = validate_form( mo_form_data ). diff --git a/src/ui/pages/zcl_abapgit_gui_page_addonline.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_addonline.clas.abap index 11a40d224..303373889 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_addonline.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_addonline.clas.abap @@ -253,7 +253,7 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION. mo_form_data->set( iv_key = c_id-package - iv_val = zcl_abapgit_services_basis=>create_package( + iv_val = zcl_abapgit_services_repo=>create_package( iv_prefill_package = |{ mo_form_data->get( c_id-package ) }| ) ). IF mo_form_data->get( c_id-package ) IS NOT INITIAL. mo_validation_log = validate_form( mo_form_data ). diff --git a/src/ui/routing/zcl_abapgit_services_basis.clas.abap b/src/ui/routing/zcl_abapgit_services_basis.clas.abap deleted file mode 100644 index bbf938d34..000000000 --- a/src/ui/routing/zcl_abapgit_services_basis.clas.abap +++ /dev/null @@ -1,66 +0,0 @@ -CLASS zcl_abapgit_services_basis DEFINITION - PUBLIC - FINAL - CREATE PUBLIC . - - PUBLIC SECTION. - - CLASS-METHODS create_package - IMPORTING - !iv_prefill_package TYPE devclass OPTIONAL - RETURNING - VALUE(rv_package) TYPE devclass - RAISING - zcx_abapgit_exception . - PROTECTED SECTION. - PRIVATE SECTION. - CLASS-METHODS raise_error_if_package_exists - IMPORTING - iv_devclass TYPE scompkdtln-devclass - RAISING - zcx_abapgit_exception. -ENDCLASS. - - - -CLASS zcl_abapgit_services_basis IMPLEMENTATION. - - - METHOD create_package. - - DATA ls_package_data TYPE scompkdtln. - DATA lv_create TYPE abap_bool. - DATA li_popup TYPE REF TO zif_abapgit_popups. - - ls_package_data-devclass = to_upper( iv_prefill_package ). - - raise_error_if_package_exists( ls_package_data-devclass ). - - li_popup = zcl_abapgit_ui_factory=>get_popups( ). - - li_popup->popup_to_create_package( - IMPORTING - es_package_data = ls_package_data - ev_create = lv_create ). - - IF lv_create = abap_true. - zcl_abapgit_factory=>get_sap_package( ls_package_data-devclass )->create( ls_package_data ). - rv_package = ls_package_data-devclass. - COMMIT WORK. - ENDIF. - - ENDMETHOD. - - - METHOD raise_error_if_package_exists. - - IF iv_devclass IS INITIAL. - RETURN. - ENDIF. - - IF zcl_abapgit_factory=>get_sap_package( iv_devclass )->exists( ) = abap_true. - zcx_abapgit_exception=>raise( |Package { iv_devclass } already exists| ). - ENDIF. - - ENDMETHOD. -ENDCLASS. diff --git a/src/ui/routing/zcl_abapgit_services_basis.clas.xml b/src/ui/routing/zcl_abapgit_services_basis.clas.xml deleted file mode 100644 index 769e1b12c..000000000 --- a/src/ui/routing/zcl_abapgit_services_basis.clas.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - ZCL_ABAPGIT_SERVICES_BASIS - E - abapGit - GUI Basis Services - 1 - X - X - X - X - - - - diff --git a/src/ui/routing/zcl_abapgit_services_repo.clas.abap b/src/ui/routing/zcl_abapgit_services_repo.clas.abap index b8a63d6d5..c6dd44f05 100644 --- a/src/ui/routing/zcl_abapgit_services_repo.clas.abap +++ b/src/ui/routing/zcl_abapgit_services_repo.clas.abap @@ -62,7 +62,20 @@ CLASS zcl_abapgit_services_repo DEFINITION RETURNING VALUE(ri_log) TYPE REF TO zif_abapgit_log RAISING - zcx_abapgit_exception . + zcx_abapgit_exception. + CLASS-METHODS create_package + IMPORTING + !iv_prefill_package TYPE devclass OPTIONAL + RETURNING + VALUE(rv_package) TYPE devclass + RAISING + zcx_abapgit_exception. + CLASS-METHODS check_and_create_package + IMPORTING + !iv_package TYPE devclass + !it_remote TYPE zif_abapgit_git_definitions=>ty_files_tt + RAISING + zcx_abapgit_exception. PROTECTED SECTION. PRIVATE SECTION. @@ -96,6 +109,11 @@ CLASS zcl_abapgit_services_repo DEFINITION !is_repo_params TYPE zif_abapgit_services_repo=>ty_repo_params RAISING zcx_abapgit_exception . + CLASS-METHODS raise_error_if_package_exists + IMPORTING + iv_devclass TYPE scompkdtln-devclass + RAISING + zcx_abapgit_exception. ENDCLASS. @@ -158,6 +176,22 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION. ENDMETHOD. + METHOD check_and_create_package. + + IF zcl_abapgit_factory=>get_sap_package( iv_package )->exists( ) = abap_false. + " Check if any package is included in remote + READ TABLE it_remote TRANSPORTING NO FIELDS + WITH KEY file + COMPONENTS filename = zcl_abapgit_filename_logic=>c_package_file. + IF sy-subrc <> 0. + " If not, prompt to create it + create_package( iv_package ). + ENDIF. + ENDIF. + + ENDMETHOD. + + METHOD check_package. DATA: @@ -183,6 +217,32 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION. ENDMETHOD. + METHOD create_package. + + DATA ls_package_data TYPE scompkdtln. + DATA lv_create TYPE abap_bool. + DATA li_popup TYPE REF TO zif_abapgit_popups. + + ls_package_data-devclass = condense( to_upper( iv_prefill_package ) ). + + raise_error_if_package_exists( ls_package_data-devclass ). + + li_popup = zcl_abapgit_ui_factory=>get_popups( ). + + li_popup->popup_to_create_package( + IMPORTING + es_package_data = ls_package_data + ev_create = lv_create ). + + IF lv_create = abap_true. + zcl_abapgit_factory=>get_sap_package( ls_package_data-devclass )->create( ls_package_data ). + rv_package = ls_package_data-devclass. + COMMIT WORK AND WAIT. + ENDIF. + + ENDMETHOD. + + METHOD delete_unnecessary_objects. DATA: @@ -282,6 +342,10 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION. iv_labels = is_repo_params-labels iv_main_lang_only = is_repo_params-main_lang_only ). + check_and_create_package( + iv_package = is_repo_params-package + it_remote = ro_repo->get_files_remote( ) ). + " Make sure there're no leftovers from previous repos ro_repo->zif_abapgit_repo~checksums( )->rebuild( ). ro_repo->reset_status( ). " TODO refactor later @@ -311,6 +375,10 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION. iv_ign_subpkg = is_repo_params-ignore_subpackages iv_main_lang_only = is_repo_params-main_lang_only ). + check_and_create_package( + iv_package = is_repo_params-package + it_remote = ro_repo->get_files_remote( ) ). + " Make sure there're no leftovers from previous repos ro_repo->zif_abapgit_repo~checksums( )->rebuild( ). ro_repo->reset_status( ). " TODO refactor later @@ -569,6 +637,19 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION. ENDMETHOD. + METHOD raise_error_if_package_exists. + + IF iv_devclass IS INITIAL. + RETURN. + ENDIF. + + IF zcl_abapgit_factory=>get_sap_package( iv_devclass )->exists( ) = abap_true. + zcx_abapgit_exception=>raise( |Package { iv_devclass } already exists| ). + ENDIF. + + ENDMETHOD. + + METHOD refresh. zcl_abapgit_repo_srv=>get_instance( )->get( iv_key )->refresh( ). diff --git a/src/ui/routing/zcl_abapgit_services_basis.clas.testclasses.abap b/src/ui/routing/zcl_abapgit_services_repo.clas.testclasses.abap similarity index 97% rename from src/ui/routing/zcl_abapgit_services_basis.clas.testclasses.abap rename to src/ui/routing/zcl_abapgit_services_repo.clas.testclasses.abap index 8bf91b5ad..339b6f20d 100644 --- a/src/ui/routing/zcl_abapgit_services_basis.clas.testclasses.abap +++ b/src/ui/routing/zcl_abapgit_services_repo.clas.testclasses.abap @@ -1,4 +1,3 @@ -*"* use this source file for your ABAP unit test classes CLASS ltcl_sap_package_mock DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. @@ -90,7 +89,7 @@ CLASS ltcl_create_package DEFINITION FINAL FOR TESTING setup, raise_error_if_package_exists FOR TESTING RAISING cx_static_check, - package_given_in_popup FOR TESTING RAISING cx_static_check, + package_given_in_popup FOR TESTING RAISING cx_static_check, package_not_created_when_canc FOR TESTING RAISING cx_static_check, package_created_when_confirm FOR TESTING RAISING cx_static_check, @@ -177,7 +176,7 @@ CLASS ltcl_create_package IMPLEMENTATION. ii_sap_package = mo_sap_package_mock ). TRY. - mv_created_package = zcl_abapgit_services_basis=>create_package( mv_package ). + mv_created_package = zcl_abapgit_services_repo=>create_package( mv_package ). CATCH zcx_abapgit_exception INTO mx_error. ENDTRY. diff --git a/src/ui/routing/zcl_abapgit_services_repo.clas.xml b/src/ui/routing/zcl_abapgit_services_repo.clas.xml index 7c6414b3c..51da1ed61 100644 --- a/src/ui/routing/zcl_abapgit_services_repo.clas.xml +++ b/src/ui/routing/zcl_abapgit_services_repo.clas.xml @@ -10,6 +10,7 @@ X X X + X