Move check_and_create_package to repo services (#6410)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2023-08-22 00:41:41 -04:00 committed by GitHub
parent c267d2ac20
commit 43db85ea38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 99 additions and 132 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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 ).

View File

@ -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 ).

View File

@ -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.

View File

@ -1,17 +0,0 @@
<?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_SERVICES_BASIS</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - GUI Basis Services</DESCRIPT>
<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>

View File

@ -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( ).

View File

@ -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.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>