mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-04 13:56:14 +08:00
Merge branch 'main' into mbtools/alav-ddic
This commit is contained in:
commit
3cfe1429c0
|
@ -91,7 +91,7 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
|
|||
lo_digest TYPE REF TO zcl_abapgit_http_digest.
|
||||
|
||||
|
||||
lv_default_user = zcl_abapgit_persistence_user=>get_instance( )->get_repo_login( iv_url ).
|
||||
lv_default_user = zcl_abapgit_persist_factory=>get_user( )->get_repo_login( iv_url ).
|
||||
lv_user = lv_default_user.
|
||||
|
||||
zcl_abapgit_password_dialog=>popup(
|
||||
|
@ -106,7 +106,7 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
IF lv_user <> lv_default_user.
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_login(
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_login(
|
||||
iv_url = iv_url
|
||||
iv_login = lv_user ).
|
||||
ENDIF.
|
||||
|
|
|
@ -4,6 +4,8 @@ CLASS zcl_abapgit_objects_check DEFINITION
|
|||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS class_constructor.
|
||||
|
||||
CLASS-METHODS deserialize_checks
|
||||
IMPORTING
|
||||
!ii_repo TYPE REF TO zif_abapgit_repo
|
||||
|
@ -11,7 +13,7 @@ CLASS zcl_abapgit_objects_check DEFINITION
|
|||
VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
CLASS-METHODS class_constructor.
|
||||
|
||||
CLASS-METHODS checks_adjust
|
||||
IMPORTING
|
||||
!ii_repo TYPE REF TO zif_abapgit_repo
|
||||
|
@ -20,10 +22,21 @@ CLASS zcl_abapgit_objects_check DEFINITION
|
|||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
PROTECTED SECTION.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA: gi_exit TYPE REF TO zif_abapgit_exit.
|
||||
|
||||
CLASS-DATA gi_exit TYPE REF TO zif_abapgit_exit.
|
||||
|
||||
CLASS-METHODS adjust_result
|
||||
IMPORTING
|
||||
!iv_txt TYPE string
|
||||
!it_overwrite_old TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
!it_overwrite_new TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
CHANGING
|
||||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS warning_overwrite_adjust
|
||||
IMPORTING
|
||||
|
@ -32,11 +45,13 @@ CLASS zcl_abapgit_objects_check DEFINITION
|
|||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS warning_overwrite_find
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt.
|
||||
|
||||
CLASS-METHODS warning_package_adjust
|
||||
IMPORTING
|
||||
!ii_repo TYPE REF TO zif_abapgit_repo
|
||||
|
@ -45,6 +60,7 @@ CLASS zcl_abapgit_objects_check DEFINITION
|
|||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS warning_package_find
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
|
@ -53,17 +69,38 @@ CLASS zcl_abapgit_objects_check DEFINITION
|
|||
VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS warning_data_loss_adjust
|
||||
IMPORTING
|
||||
!ii_repo TYPE REF TO zif_abapgit_repo
|
||||
!it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
CHANGING
|
||||
!ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS warning_data_loss_find
|
||||
IMPORTING
|
||||
!ii_repo TYPE REF TO zif_abapgit_repo
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RETURNING
|
||||
VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS determine_transport_request
|
||||
IMPORTING
|
||||
ii_repo TYPE REF TO zif_abapgit_repo
|
||||
iv_transport_type TYPE zif_abapgit_definitions=>ty_transport_type
|
||||
RETURNING
|
||||
VALUE(rv_transport_request) TYPE trkorr.
|
||||
|
||||
CLASS-METHODS check_multiple_files
|
||||
IMPORTING
|
||||
!it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -71,8 +108,36 @@ ENDCLASS.
|
|||
CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD adjust_result.
|
||||
|
||||
DATA ls_overwrite TYPE zif_abapgit_definitions=>ty_overwrite.
|
||||
|
||||
FIELD-SYMBOLS <ls_overwrite> TYPE zif_abapgit_definitions=>ty_overwrite.
|
||||
|
||||
LOOP AT it_overwrite_new ASSIGNING <ls_overwrite>.
|
||||
|
||||
READ TABLE it_overwrite_old INTO ls_overwrite WITH TABLE KEY object_type_and_name
|
||||
COMPONENTS obj_type = <ls_overwrite>-obj_type obj_name = <ls_overwrite>-obj_name.
|
||||
IF sy-subrc <> 0 OR ls_overwrite-decision IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |{ iv_txt } { <ls_overwrite>-obj_type } { <ls_overwrite>-obj_name } undecided| ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_overwrite-decision = zif_abapgit_definitions=>c_no.
|
||||
DELETE ct_results WHERE obj_type = <ls_overwrite>-obj_type AND obj_name = <ls_overwrite>-obj_name.
|
||||
ASSERT sy-subrc = 0.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD checks_adjust.
|
||||
|
||||
" Make sure to get the current status, as something might have changed in the meanwhile
|
||||
" - Remove objects from results that were deselected in confirmation popup
|
||||
" - Raise exception if an object has no decision of what to do
|
||||
|
||||
warning_overwrite_adjust(
|
||||
EXPORTING
|
||||
it_overwrite = is_checks-overwrite
|
||||
|
@ -86,6 +151,13 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
|||
CHANGING
|
||||
ct_results = ct_results ).
|
||||
|
||||
warning_data_loss_adjust(
|
||||
EXPORTING
|
||||
ii_repo = ii_repo
|
||||
it_overwrite = is_checks-data_loss
|
||||
CHANGING
|
||||
ct_results = ct_results ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -144,6 +216,10 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
|||
ii_repo = ii_repo
|
||||
it_results = lt_results ).
|
||||
|
||||
rs_checks-data_loss = warning_data_loss_find(
|
||||
ii_repo = ii_repo
|
||||
it_results = lt_results ).
|
||||
|
||||
IF lines( lt_results ) > 0.
|
||||
li_package = zcl_abapgit_factory=>get_sap_package( ii_repo->get_package( ) ).
|
||||
rs_checks-transport-required = li_package->are_changes_recorded_in_tr_req( ).
|
||||
|
@ -174,33 +250,62 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_overwrite_adjust.
|
||||
METHOD warning_data_loss_adjust.
|
||||
|
||||
DATA: lt_overwrite LIKE it_overwrite,
|
||||
ls_overwrite LIKE LINE OF lt_overwrite.
|
||||
DATA lt_overwrite LIKE it_overwrite.
|
||||
|
||||
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF lt_overwrite.
|
||||
lt_overwrite = warning_data_loss_find(
|
||||
it_results = ct_results
|
||||
ii_repo = ii_repo ).
|
||||
|
||||
adjust_result(
|
||||
EXPORTING
|
||||
iv_txt = 'Potential data loss for'
|
||||
it_overwrite_old = it_overwrite
|
||||
it_overwrite_new = lt_overwrite
|
||||
CHANGING
|
||||
ct_results = ct_results ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
* make sure to get the current status, as something might have changed in the meanwhile
|
||||
lt_overwrite = warning_overwrite_find( ct_results ).
|
||||
METHOD warning_data_loss_find.
|
||||
|
||||
LOOP AT lt_overwrite ASSIGNING <ls_overwrite>.
|
||||
DATA:
|
||||
ls_item TYPE zif_abapgit_definitions=>ty_item,
|
||||
li_comparator TYPE REF TO zif_abapgit_comparator,
|
||||
lv_result TYPE string.
|
||||
|
||||
READ TABLE it_overwrite INTO ls_overwrite
|
||||
WITH TABLE KEY object_type_and_name
|
||||
COMPONENTS obj_type = <ls_overwrite>-obj_type
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
IF sy-subrc <> 0 OR ls_overwrite-decision IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |Overwrite { <ls_overwrite>-obj_type } {
|
||||
<ls_overwrite>-obj_name } undecided| ).
|
||||
FIELD-SYMBOLS:
|
||||
<ls_result> LIKE LINE OF it_results,
|
||||
<ls_overwrite> LIKE LINE OF rt_overwrite.
|
||||
|
||||
" For optimal performance, we limit here by object type since we know that only TABL has a comparator
|
||||
" If there are other object types in the future, extend the where clause or remove the check on object type.
|
||||
LOOP AT it_results ASSIGNING <ls_result> WHERE match IS INITIAL AND filename CP '*.xml'
|
||||
AND obj_type = 'TABL' ##PRIMKEY[SEC_KEY].
|
||||
|
||||
CLEAR ls_item.
|
||||
MOVE-CORRESPONDING <ls_result> TO ls_item.
|
||||
|
||||
li_comparator = zcl_abapgit_objects_compare=>get_comparator( ls_item ).
|
||||
IF NOT li_comparator IS BOUND.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF ls_overwrite-decision = zif_abapgit_definitions=>c_no.
|
||||
DELETE ct_results WHERE
|
||||
obj_type = <ls_overwrite>-obj_type AND
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
ASSERT sy-subrc = 0.
|
||||
lv_result = zcl_abapgit_objects_compare=>get_result(
|
||||
ii_comparator = li_comparator
|
||||
iv_filename = <ls_result>-filename
|
||||
it_local = ii_repo->get_files_local( )
|
||||
it_remote = ii_repo->get_files_remote( iv_ignore_files = abap_true ) ).
|
||||
|
||||
IF lv_result IS NOT INITIAL.
|
||||
APPEND INITIAL LINE TO rt_overwrite ASSIGNING <ls_overwrite>.
|
||||
MOVE-CORRESPONDING <ls_result> TO <ls_overwrite>.
|
||||
<ls_overwrite>-devclass = <ls_result>-package.
|
||||
<ls_overwrite>-action = zif_abapgit_objects=>c_deserialize_action-data_loss.
|
||||
<ls_overwrite>-icon = icon_warning.
|
||||
<ls_overwrite>-text = lv_result.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
@ -208,6 +313,23 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_overwrite_adjust.
|
||||
|
||||
DATA lt_overwrite LIKE it_overwrite.
|
||||
|
||||
lt_overwrite = warning_overwrite_find( ct_results ).
|
||||
|
||||
adjust_result(
|
||||
EXPORTING
|
||||
iv_txt = 'Overwrite of object'
|
||||
it_overwrite_old = it_overwrite
|
||||
it_overwrite_new = lt_overwrite
|
||||
CHANGING
|
||||
ct_results = ct_results ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD warning_overwrite_find.
|
||||
|
||||
DATA:
|
||||
|
@ -301,36 +423,19 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
|||
|
||||
METHOD warning_package_adjust.
|
||||
|
||||
DATA: lt_overwrite LIKE it_overwrite,
|
||||
ls_overwrite LIKE LINE OF lt_overwrite.
|
||||
DATA lt_overwrite LIKE it_overwrite.
|
||||
|
||||
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF lt_overwrite.
|
||||
|
||||
|
||||
* make sure to get the current status, as something might have changed in the meanwhile
|
||||
lt_overwrite = warning_package_find(
|
||||
it_results = ct_results
|
||||
ii_repo = ii_repo ).
|
||||
|
||||
LOOP AT lt_overwrite ASSIGNING <ls_overwrite>.
|
||||
|
||||
READ TABLE it_overwrite INTO ls_overwrite
|
||||
WITH TABLE KEY object_type_and_name
|
||||
COMPONENTS obj_type = <ls_overwrite>-obj_type
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
IF sy-subrc <> 0 OR ls_overwrite-decision IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |Overwrite of package { <ls_overwrite>-obj_type } {
|
||||
<ls_overwrite>-obj_name } undecided| ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_overwrite-decision = zif_abapgit_definitions=>c_no.
|
||||
DELETE ct_results WHERE
|
||||
obj_type = <ls_overwrite>-obj_type AND
|
||||
obj_name = <ls_overwrite>-obj_name.
|
||||
ASSERT sy-subrc = 0.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
adjust_result(
|
||||
EXPORTING
|
||||
iv_txt = 'Overwrite of package'
|
||||
it_overwrite_old = it_overwrite
|
||||
it_overwrite_new = lt_overwrite
|
||||
CHANGING
|
||||
ct_results = ct_results ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -361,7 +466,7 @@ CLASS zcl_abapgit_objects_check IMPLEMENTATION.
|
|||
iv_obj_name = <ls_result>-obj_name ).
|
||||
|
||||
IF NOT ls_tadir IS INITIAL AND ls_tadir-devclass <> lv_package.
|
||||
* overwriting object from different package than expected
|
||||
" overwriting object from different package than expected
|
||||
CLEAR ls_overwrite.
|
||||
CONCATENATE <ls_result>-lstate <ls_result>-rstate INTO ls_overwrite-state RESPECTING BLANKS.
|
||||
REPLACE ALL OCCURRENCES OF ` ` IN ls_overwrite-state WITH '_'.
|
||||
|
|
114
src/objects/core/zcl_abapgit_objects_compare.clas.abap
Normal file
114
src/objects/core/zcl_abapgit_objects_compare.clas.abap
Normal file
|
@ -0,0 +1,114 @@
|
|||
CLASS zcl_abapgit_objects_compare DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS get_comparator
|
||||
IMPORTING
|
||||
is_item TYPE zif_abapgit_definitions=>ty_item
|
||||
RETURNING
|
||||
VALUE(ri_comparator) TYPE REF TO zif_abapgit_comparator.
|
||||
|
||||
CLASS-METHODS get_result
|
||||
IMPORTING
|
||||
ii_comparator TYPE REF TO zif_abapgit_comparator
|
||||
iv_filename TYPE string
|
||||
it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
|
||||
it_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
|
||||
RETURNING
|
||||
VALUE(rv_result) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_objects_compare IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD get_comparator.
|
||||
|
||||
DATA lv_class_name TYPE seoclsname.
|
||||
|
||||
CONCATENATE 'ZCL_ABAPGIT_OBJECT_' is_item-obj_type '_COMPAR' INTO lv_class_name.
|
||||
|
||||
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
|
||||
" Prevent accidental usage of object handlers in the developer version
|
||||
lv_class_name = |\\PROGRAM={ sy-repid }\\CLASS={ lv_class_name }|.
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT ri_comparator TYPE (lv_class_name)
|
||||
EXPORTING
|
||||
is_item = is_item.
|
||||
CATCH cx_sy_create_object_error ##NO_HANDLER.
|
||||
" No instance, no comparator for this object type
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_result.
|
||||
|
||||
" this method is used for comparing local with remote objects
|
||||
" before pull, this is useful eg. when overwriting a TABL object.
|
||||
" only the main XML file is used for comparison
|
||||
|
||||
DATA:
|
||||
ls_remote_file TYPE zif_abapgit_git_definitions=>ty_file,
|
||||
ls_local_file TYPE zif_abapgit_definitions=>ty_file_item,
|
||||
li_remote_version TYPE REF TO zif_abapgit_xml_input,
|
||||
li_local_version TYPE REF TO zif_abapgit_xml_input,
|
||||
li_log TYPE REF TO zif_abapgit_log,
|
||||
ls_msg TYPE zif_abapgit_log=>ty_log_out,
|
||||
lt_msg TYPE zif_abapgit_log=>ty_log_outs,
|
||||
ls_result TYPE zif_abapgit_comparator=>ty_result.
|
||||
|
||||
" REMOTE
|
||||
" if file does not exist in remote, we don't need to validate
|
||||
READ TABLE it_remote WITH KEY file COMPONENTS filename = iv_filename INTO ls_remote_file.
|
||||
IF sy-subrc <> 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT li_remote_version TYPE zcl_abapgit_xml_input
|
||||
EXPORTING
|
||||
iv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( ls_remote_file-data )
|
||||
iv_filename = iv_filename.
|
||||
|
||||
" LOCAL
|
||||
" if file does not exist locally, we don't need to validate
|
||||
READ TABLE it_local WITH KEY file-filename = iv_filename INTO ls_local_file.
|
||||
IF sy-subrc <> 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT li_local_version TYPE zcl_abapgit_xml_input
|
||||
EXPORTING
|
||||
iv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( ls_local_file-file-data )
|
||||
iv_filename = iv_filename.
|
||||
|
||||
" COMPARE
|
||||
CREATE OBJECT li_log TYPE zcl_abapgit_log.
|
||||
|
||||
ls_result = ii_comparator->compare(
|
||||
ii_local = li_local_version
|
||||
ii_remote = li_remote_version
|
||||
ii_log = li_log ).
|
||||
|
||||
rv_result = ls_result-text.
|
||||
|
||||
" To keep it simple, append the log messages to the result
|
||||
lt_msg = li_log->get_messages( ).
|
||||
|
||||
LOOP AT lt_msg INTO ls_msg.
|
||||
rv_result = |{ rv_result }, { ls_msg-text }|.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
16
src/objects/core/zcl_abapgit_objects_compare.clas.xml
Normal file
16
src/objects/core/zcl_abapgit_objects_compare.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?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_OBJECTS_COMPARE</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Objects Comparator</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -866,24 +866,8 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD zif_abapgit_object~get_comparator.
|
||||
|
||||
DATA: li_local_version_output TYPE REF TO zif_abapgit_xml_output,
|
||||
li_local_version_input TYPE REF TO zif_abapgit_xml_input.
|
||||
|
||||
|
||||
CREATE OBJECT li_local_version_output TYPE zcl_abapgit_xml_output.
|
||||
|
||||
zif_abapgit_object~serialize( li_local_version_output ).
|
||||
|
||||
CREATE OBJECT li_local_version_input
|
||||
TYPE zcl_abapgit_xml_input
|
||||
EXPORTING
|
||||
iv_xml = li_local_version_output->render( ).
|
||||
|
||||
CREATE OBJECT ri_comparator TYPE zcl_abapgit_object_tabl_compar
|
||||
EXPORTING
|
||||
ii_local = li_local_version_input.
|
||||
|
||||
" Moved to zcl_abapgit_objects_compare
|
||||
RETURN.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,8 @@ CLASS zcl_abapgit_object_tabl_compar DEFINITION
|
|||
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!ii_local TYPE REF TO zif_abapgit_xml_input.
|
||||
!is_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
TYPES:
|
||||
|
@ -18,7 +19,7 @@ CLASS zcl_abapgit_object_tabl_compar DEFINITION
|
|||
ty_seu_obj TYPE STANDARD TABLE OF seu_obj
|
||||
WITH NON-UNIQUE DEFAULT KEY.
|
||||
|
||||
DATA mi_local TYPE REF TO zif_abapgit_xml_input.
|
||||
DATA ms_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
|
||||
METHODS get_where_used_recursive
|
||||
IMPORTING
|
||||
|
@ -30,6 +31,7 @@ CLASS zcl_abapgit_object_tabl_compar DEFINITION
|
|||
VALUE(rt_founds_all) TYPE ty_founds
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS is_structure_used_in_db_table
|
||||
IMPORTING
|
||||
!iv_object_name TYPE dd02v-tabname
|
||||
|
@ -37,6 +39,7 @@ CLASS zcl_abapgit_object_tabl_compar DEFINITION
|
|||
VALUE(rv_is_structure_used_in_db_tab) TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING
|
||||
!ii_remote_version TYPE REF TO zif_abapgit_xml_input
|
||||
|
@ -46,18 +49,18 @@ CLASS zcl_abapgit_object_tabl_compar DEFINITION
|
|||
VALUE(rv_message) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
PRIVATE SECTION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_OBJECT_TABL_COMPAR IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_object_tabl_compar IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
mi_local = ii_local.
|
||||
ms_item = is_item.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -152,7 +155,6 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL_COMPAR IMPLEMENTATION.
|
|||
lt_current_table_fields TYPE TABLE OF dd03p,
|
||||
ls_current_table_field LIKE LINE OF lt_current_table_fields,
|
||||
ls_dd02v TYPE dd02v,
|
||||
ls_item TYPE zif_abapgit_definitions=>ty_item,
|
||||
lv_inconsistent TYPE abap_bool.
|
||||
|
||||
FIELD-SYMBOLS <lv_is_gtt> TYPE abap_bool.
|
||||
|
@ -186,9 +188,6 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL_COMPAR IMPLEMENTATION.
|
|||
CHANGING
|
||||
cg_data = lt_current_table_fields ).
|
||||
|
||||
ls_item-obj_name = ls_dd02v-tabname.
|
||||
ls_item-obj_type = 'TABL'.
|
||||
|
||||
LOOP AT lt_previous_table_fields INTO ls_previous_table_field.
|
||||
READ TABLE lt_current_table_fields WITH KEY fieldname = ls_previous_table_field-fieldname
|
||||
INTO ls_current_table_field.
|
||||
|
@ -199,37 +198,34 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL_COMPAR IMPLEMENTATION.
|
|||
iv_msg = |Field { ls_previous_table_field-fieldname }: | &
|
||||
|Data element changed from { ls_previous_table_field-rollname } | &
|
||||
|to { ls_current_table_field-rollname }|
|
||||
is_item = ls_item ).
|
||||
is_item = ms_item ).
|
||||
ELSEIF ls_current_table_field-rollname IS NOT INITIAL.
|
||||
ii_log->add_info(
|
||||
iv_msg = |Field { ls_previous_table_field-fieldname }: | &
|
||||
|Data type changed from internal type | &
|
||||
|{ ls_previous_table_field-inttype }(length { ls_previous_table_field-intlen }) | &
|
||||
|to data element { ls_current_table_field-rollname }|
|
||||
is_item = ls_item ).
|
||||
is_item = ms_item ).
|
||||
ELSEIF ls_previous_table_field-rollname IS NOT INITIAL.
|
||||
ii_log->add_info(
|
||||
iv_msg = |Field { ls_previous_table_field-fieldname }: | &
|
||||
|Data type changed from date element { ls_previous_table_field-rollname } | &
|
||||
|to internal type | &
|
||||
|{ ls_current_table_field-inttype }(length { ls_current_table_field-intlen })|
|
||||
is_item = ls_item ).
|
||||
is_item = ms_item ).
|
||||
ENDIF.
|
||||
"TODO: perform several other checks, e.g. field length truncated, ...
|
||||
lv_inconsistent = abap_true.
|
||||
ENDIF.
|
||||
ELSE.
|
||||
ii_log->add_info( iv_msg = |Field { ls_previous_table_field-fieldname } removed|
|
||||
is_item = ls_item ).
|
||||
is_item = ms_item ).
|
||||
lv_inconsistent = abap_true.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
IF lv_inconsistent = abap_true.
|
||||
rv_message = |Database Table { ls_dd02v-tabname }: Fields were changed. This may lead to inconsistencies!|.
|
||||
ENDIF.
|
||||
|
||||
IF NOT rv_message IS INITIAL.
|
||||
rv_message = |Database Table { ls_dd02v-tabname }: { rv_message }|.
|
||||
IF lv_inconsistent = abap_true.
|
||||
rv_message = 'Fields were changed!'.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
@ -237,9 +233,13 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL_COMPAR IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_comparator~compare.
|
||||
|
||||
IF zcl_abapgit_objects=>exists( ms_item ) = abap_false.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rs_result-text = validate(
|
||||
ii_remote_version = ii_remote
|
||||
ii_local_version = mi_local
|
||||
ii_local_version = ii_local
|
||||
ii_log = ii_log ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -120,14 +120,6 @@ CLASS zcl_abapgit_objects DEFINITION
|
|||
!iv_transport TYPE trkorr
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS compare_remote_to_local
|
||||
IMPORTING
|
||||
!ii_object TYPE REF TO zif_abapgit_object
|
||||
!it_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
|
||||
!is_result TYPE zif_abapgit_definitions=>ty_result
|
||||
!ii_log TYPE REF TO zif_abapgit_log
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS deserialize_steps
|
||||
IMPORTING
|
||||
!it_steps TYPE zif_abapgit_objects=>ty_step_data_tt
|
||||
|
@ -386,80 +378,6 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD compare_remote_to_local.
|
||||
* this method is used for comparing local with remote objects
|
||||
* before pull, this is useful eg. when overwriting a TABL object.
|
||||
* only the main XML file is used for comparison
|
||||
|
||||
DATA: ls_remote_file TYPE zif_abapgit_git_definitions=>ty_file,
|
||||
li_remote_version TYPE REF TO zif_abapgit_xml_input,
|
||||
lv_count TYPE i,
|
||||
ls_result TYPE zif_abapgit_comparator=>ty_result,
|
||||
lv_answer TYPE string,
|
||||
li_comparator TYPE REF TO zif_abapgit_comparator,
|
||||
ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
|
||||
FIND ALL OCCURRENCES OF '.' IN is_result-filename MATCH COUNT lv_count.
|
||||
|
||||
IF is_result-filename CS '.XML' AND lv_count = 2.
|
||||
IF ii_object->exists( ) = abap_false.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE it_remote WITH KEY file
|
||||
COMPONENTS filename = is_result-filename INTO ls_remote_file.
|
||||
IF sy-subrc <> 0. "if file does not exist in remote, we don't need to validate
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
li_comparator = ii_object->get_comparator( ).
|
||||
IF NOT li_comparator IS BOUND.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT li_remote_version
|
||||
TYPE zcl_abapgit_xml_input
|
||||
EXPORTING
|
||||
iv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( ls_remote_file-data )
|
||||
iv_filename = ls_remote_file-filename.
|
||||
|
||||
ls_result = li_comparator->compare( ii_remote = li_remote_version
|
||||
ii_log = ii_log ).
|
||||
IF ls_result-text IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
"log comparison result
|
||||
ls_item-obj_type = is_result-obj_type.
|
||||
ls_item-obj_name = is_result-obj_name.
|
||||
ii_log->add_warning( iv_msg = ls_result-text
|
||||
is_item = ls_item ).
|
||||
|
||||
"continue or abort?
|
||||
IF zcl_abapgit_ui_factory=>get_frontend_services( )->gui_is_available( ) = abap_true.
|
||||
lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm(
|
||||
iv_titlebar = 'Warning'
|
||||
iv_text_question = ls_result-text
|
||||
iv_text_button_1 = 'Pull Anyway'
|
||||
iv_icon_button_1 = 'ICON_OKAY'
|
||||
iv_text_button_2 = 'Cancel'
|
||||
iv_icon_button_2 = 'ICON_CANCEL'
|
||||
iv_default_button = '2'
|
||||
iv_display_cancel_button = abap_false ).
|
||||
|
||||
IF lv_answer = '2'.
|
||||
zcx_abapgit_exception=>raise( |Deserialization for object { is_result-obj_name } | &
|
||||
|(type { is_result-obj_type }) aborted by user| ).
|
||||
ENDIF.
|
||||
ELSE.
|
||||
zcx_abapgit_exception=>raise( |Deserialization for object { is_result-obj_name } | &
|
||||
|(type { is_result-obj_type }) aborted, user decision required| ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_object.
|
||||
|
||||
DATA: lv_class_name TYPE string,
|
||||
|
@ -803,12 +721,6 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
io_files = lo_files
|
||||
io_i18n_params = lo_i18n_params ).
|
||||
|
||||
compare_remote_to_local(
|
||||
ii_object = li_obj
|
||||
it_remote = lt_remote
|
||||
is_result = <ls_result>
|
||||
ii_log = ii_log ).
|
||||
|
||||
"get required steps for deserialize the object
|
||||
lt_steps_id = li_obj->get_deserialize_steps( ).
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ INTERFACE zif_abapgit_comparator
|
|||
|
||||
METHODS compare
|
||||
IMPORTING
|
||||
!ii_local TYPE REF TO zif_abapgit_xml_input
|
||||
!ii_remote TYPE REF TO zif_abapgit_xml_input
|
||||
!ii_log TYPE REF TO zif_abapgit_log
|
||||
RETURNING
|
||||
|
|
|
@ -43,6 +43,7 @@ INTERFACE zif_abapgit_objects PUBLIC.
|
|||
delete TYPE i VALUE 4,
|
||||
delete_add TYPE i VALUE 5,
|
||||
packmove TYPE i VALUE 6,
|
||||
data_loss TYPE i VALUE 7,
|
||||
END OF c_deserialize_action.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
|
@ -14,7 +14,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_PERSIST_SETTINGS IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_persist_settings IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD zif_abapgit_persist_settings~modify.
|
||||
|
@ -32,7 +32,7 @@ CLASS ZCL_ABAPGIT_PERSIST_SETTINGS IMPLEMENTATION.
|
|||
|
||||
ls_user_settings = io_settings->get_user_settings( ).
|
||||
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_settings( ls_user_settings ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_settings( ls_user_settings ).
|
||||
|
||||
" Settings have been modified: Update Buffered Settings
|
||||
IF mo_settings IS BOUND.
|
||||
|
@ -61,7 +61,7 @@ CLASS ZCL_ABAPGIT_PERSIST_SETTINGS IMPLEMENTATION.
|
|||
iv_type = zcl_abapgit_persistence_db=>c_type_settings
|
||||
iv_value = '' ) ).
|
||||
|
||||
ro_settings->set_user_settings( zcl_abapgit_persistence_user=>get_instance( )->get_settings( ) ).
|
||||
ro_settings->set_user_settings( zcl_abapgit_persist_factory=>get_user( )->get_settings( ) ).
|
||||
|
||||
CATCH zcx_abapgit_not_found zcx_abapgit_exception.
|
||||
|
||||
|
|
|
@ -7,13 +7,6 @@ CLASS zcl_abapgit_persistence_user DEFINITION
|
|||
|
||||
INTERFACES zif_abapgit_persist_user .
|
||||
|
||||
CLASS-METHODS get_instance
|
||||
IMPORTING
|
||||
!iv_user TYPE sy-uname DEFAULT sy-uname
|
||||
RETURNING
|
||||
VALUE(ri_user) TYPE REF TO zif_abapgit_persist_user
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!iv_user TYPE sy-uname DEFAULT sy-uname.
|
||||
|
@ -48,7 +41,6 @@ CLASS zcl_abapgit_persistence_user DEFINITION
|
|||
|
||||
DATA mv_user TYPE sy-uname .
|
||||
DATA ms_user TYPE ty_user.
|
||||
CLASS-DATA gi_current_user TYPE REF TO zif_abapgit_persist_user .
|
||||
|
||||
METHODS from_xml
|
||||
IMPORTING
|
||||
|
@ -107,22 +99,6 @@ CLASS zcl_abapgit_persistence_user IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_instance.
|
||||
|
||||
IF iv_user = sy-uname ##USER_OK.
|
||||
IF gi_current_user IS NOT BOUND.
|
||||
CREATE OBJECT gi_current_user TYPE zcl_abapgit_persistence_user.
|
||||
ENDIF.
|
||||
ri_user = gi_current_user.
|
||||
ELSE.
|
||||
CREATE OBJECT ri_user TYPE zcl_abapgit_persistence_user
|
||||
EXPORTING
|
||||
iv_user = iv_user.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD read.
|
||||
|
||||
DATA: lv_xml TYPE string.
|
||||
|
|
|
@ -27,12 +27,12 @@ CLASS ltcl_user IMPLEMENTATION.
|
|||
|
||||
DATA: lv_user TYPE string.
|
||||
|
||||
mi_user = zcl_abapgit_persistence_user=>get_instance( c_abap_user ).
|
||||
mi_user = zcl_abapgit_persist_factory=>get_user( c_abap_user ).
|
||||
mi_user->set_default_git_user_name( c_git_user ).
|
||||
|
||||
FREE mi_user.
|
||||
|
||||
mi_user = zcl_abapgit_persistence_user=>get_instance( c_abap_user ).
|
||||
mi_user = zcl_abapgit_persist_factory=>get_user( c_abap_user ).
|
||||
lv_user = mi_user->get_default_git_user_name( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
@ -52,12 +52,12 @@ CLASS ltcl_user IMPLEMENTATION.
|
|||
RETURN. " can't test
|
||||
ENDIF.
|
||||
|
||||
mi_user = zcl_abapgit_persistence_user=>get_instance( c_abap_user ).
|
||||
mi_user = zcl_abapgit_persist_factory=>get_user( c_abap_user ).
|
||||
mi_user->set_repo_show( lv_repo_key ).
|
||||
|
||||
FREE mi_user.
|
||||
|
||||
mi_user = zcl_abapgit_persistence_user=>get_instance( c_abap_user ).
|
||||
mi_user = zcl_abapgit_persist_factory=>get_user( c_abap_user ).
|
||||
lv_key = mi_user->get_repo_show( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
@ -70,13 +70,13 @@ CLASS ltcl_user IMPLEMENTATION.
|
|||
|
||||
DATA: lv_login TYPE string.
|
||||
|
||||
mi_user = zcl_abapgit_persistence_user=>get_instance( c_abap_user ).
|
||||
mi_user = zcl_abapgit_persist_factory=>get_user( c_abap_user ).
|
||||
mi_user->set_repo_login( iv_url = c_repo_url
|
||||
iv_login = c_git_user ).
|
||||
|
||||
FREE mi_user.
|
||||
|
||||
mi_user = zcl_abapgit_persistence_user=>get_instance( c_abap_user ).
|
||||
mi_user = zcl_abapgit_persist_factory=>get_user( c_abap_user ).
|
||||
lv_login = mi_user->get_repo_login( c_repo_url ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
@ -91,12 +91,12 @@ CLASS ltcl_user IMPLEMENTATION.
|
|||
|
||||
ls_settings-show_default_repo = abap_true.
|
||||
|
||||
mi_user = zcl_abapgit_persistence_user=>get_instance( c_abap_user ).
|
||||
mi_user = zcl_abapgit_persist_factory=>get_user( c_abap_user ).
|
||||
mi_user->set_settings( ls_settings ).
|
||||
|
||||
FREE mi_user.
|
||||
|
||||
mi_user = zcl_abapgit_persistence_user=>get_instance( c_abap_user ).
|
||||
mi_user = zcl_abapgit_persist_factory=>get_user( c_abap_user ).
|
||||
ls_settings = mi_user->get_settings( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
|
|
@ -146,7 +146,7 @@ CLASS zcl_abapgit_repo_news IMPLEMENTATION.
|
|||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_last_seen = zcl_abapgit_persistence_user=>get_instance( )->get_repo_last_change_seen( lv_url ).
|
||||
lv_last_seen = zcl_abapgit_persist_factory=>get_user( )->get_repo_last_change_seen( lv_url ).
|
||||
|
||||
TRY. " Find changelog
|
||||
lt_remote = ii_repo->get_files_remote( ).
|
||||
|
@ -170,7 +170,7 @@ CLASS zcl_abapgit_repo_news IMPLEMENTATION.
|
|||
ENDLOOP.
|
||||
|
||||
IF ro_instance IS BOUND AND lv_last_seen <> ro_instance->latest_version( ).
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_last_change_seen(
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_last_change_seen(
|
||||
iv_url = lv_url
|
||||
iv_version = ro_instance->latest_version( ) ).
|
||||
ENDIF.
|
||||
|
|
|
@ -178,7 +178,7 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
|
|||
FIELD-SYMBOLS: <ls_repo_record> LIKE LINE OF lt_list.
|
||||
|
||||
lo_repo_db = zcl_abapgit_persist_factory=>get_repo( ).
|
||||
lt_user_favorites = zcl_abapgit_persistence_user=>get_instance( )->get_favorites( ).
|
||||
lt_user_favorites = zcl_abapgit_persist_factory=>get_user( )->get_favorites( ).
|
||||
lt_list = lo_repo_db->list_by_keys( lt_user_favorites ).
|
||||
|
||||
SORT lt_list BY package.
|
||||
|
@ -330,8 +330,8 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
|
|||
zcl_abapgit_persist_factory=>get_repo_cs( )->delete( ii_repo->get_key( ) ).
|
||||
|
||||
" If favorite, remove it
|
||||
IF zcl_abapgit_persistence_user=>get_instance( )->is_favorite_repo( ii_repo->get_key( ) ) = abap_true.
|
||||
zcl_abapgit_persistence_user=>get_instance( )->toggle_favorite( ii_repo->get_key( ) ).
|
||||
IF zcl_abapgit_persist_factory=>get_user( )->is_favorite_repo( ii_repo->get_key( ) ) = abap_true.
|
||||
zcl_abapgit_persist_factory=>get_user( )->toggle_favorite( ii_repo->get_key( ) ).
|
||||
ENDIF.
|
||||
|
||||
DELETE TABLE mt_list FROM ii_repo.
|
||||
|
@ -532,7 +532,7 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
|
|||
DATA lt_user_favorites TYPE zif_abapgit_persist_user=>ty_favorites.
|
||||
DATA li_repo TYPE REF TO zif_abapgit_repo.
|
||||
|
||||
lt_user_favorites = zcl_abapgit_persistence_user=>get_instance( )->get_favorites( ).
|
||||
lt_user_favorites = zcl_abapgit_persist_factory=>get_user( )->get_favorites( ).
|
||||
SORT lt_user_favorites BY table_line.
|
||||
|
||||
IF mv_init = abap_false OR mv_only_favorites = abap_false.
|
||||
|
|
|
@ -1013,7 +1013,7 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
|
|||
ri_html->add( '<td class="repo_attr right">' ).
|
||||
|
||||
" Fav
|
||||
IF abap_true = zcl_abapgit_persistence_user=>get_instance( )->is_favorite_repo( ii_repo->get_key( ) ).
|
||||
IF abap_true = zcl_abapgit_persist_factory=>get_user( )->is_favorite_repo( ii_repo->get_key( ) ).
|
||||
lv_icon = 'star/blue'.
|
||||
ELSE.
|
||||
lv_icon = 'star/grey'.
|
||||
|
|
|
@ -233,7 +233,7 @@ CLASS zcl_abapgit_gui_page_commit IMPLEMENTATION.
|
|||
|
||||
DATA li_user TYPE REF TO zif_abapgit_persist_user.
|
||||
|
||||
li_user = zcl_abapgit_persistence_user=>get_instance( ).
|
||||
li_user = zcl_abapgit_persist_factory=>get_user( ).
|
||||
|
||||
rv_email = li_user->get_repo_git_user_email( mi_repo_online->get_url( ) ).
|
||||
IF rv_email IS INITIAL.
|
||||
|
@ -251,7 +251,7 @@ CLASS zcl_abapgit_gui_page_commit IMPLEMENTATION.
|
|||
|
||||
DATA li_user TYPE REF TO zif_abapgit_persist_user.
|
||||
|
||||
li_user = zcl_abapgit_persistence_user=>get_instance( ).
|
||||
li_user = zcl_abapgit_persist_factory=>get_user( ).
|
||||
|
||||
rv_user = li_user->get_repo_git_user_name( mi_repo_online->get_url( ) ).
|
||||
IF rv_user IS INITIAL.
|
||||
|
|
|
@ -620,7 +620,7 @@ CLASS zcl_abapgit_gui_page_diff_base IMPLEMENTATION.
|
|||
DATA: lv_ts TYPE timestamp.
|
||||
|
||||
super->constructor( ).
|
||||
mv_unified = zcl_abapgit_persistence_user=>get_instance( )->get_diff_unified( ).
|
||||
mv_unified = zcl_abapgit_persist_factory=>get_user( )->get_diff_unified( ).
|
||||
mv_repo_key = iv_key.
|
||||
mi_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
|
||||
|
||||
|
@ -654,7 +654,7 @@ CLASS zcl_abapgit_gui_page_diff_base IMPLEMENTATION.
|
|||
METHOD get_page_layout.
|
||||
|
||||
TRY.
|
||||
IF zcl_abapgit_persistence_user=>get_instance( )->get_diff_unified( ) = abap_true.
|
||||
IF zcl_abapgit_persist_factory=>get_user( )->get_diff_unified( ) = abap_true.
|
||||
rv_page_layout = zcl_abapgit_gui_page=>c_page_layout-centered.
|
||||
ELSE.
|
||||
rv_page_layout = zcl_abapgit_gui_page=>c_page_layout-full_width.
|
||||
|
@ -1294,7 +1294,7 @@ CLASS zcl_abapgit_gui_page_diff_base IMPLEMENTATION.
|
|||
CASE ii_event->mv_action.
|
||||
WHEN c_actions-toggle_unified. " Toggle file display
|
||||
|
||||
mv_unified = zcl_abapgit_persistence_user=>get_instance( )->toggle_diff_unified( ).
|
||||
mv_unified = zcl_abapgit_persist_factory=>get_user( )->toggle_diff_unified( ).
|
||||
|
||||
rs_handled-page = zcl_abapgit_gui_page_hoc=>create(
|
||||
iv_page_title = 'Diff'
|
||||
|
|
|
@ -347,7 +347,7 @@ CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION.
|
|||
|
||||
super->constructor( ).
|
||||
|
||||
ms_list_settings = zcl_abapgit_persistence_user=>get_instance( )->get_list_settings( ).
|
||||
ms_list_settings = zcl_abapgit_persist_factory=>get_user( )->get_list_settings( ).
|
||||
|
||||
" Overwrite setting
|
||||
IF iv_only_favorites = abap_true.
|
||||
|
@ -382,7 +382,7 @@ CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION.
|
|||
|
||||
CLEAR ls_overview.
|
||||
|
||||
ls_overview-favorite = zcl_abapgit_persistence_user=>get_instance(
|
||||
ls_overview-favorite = zcl_abapgit_persist_factory=>get_user(
|
||||
)->is_favorite_repo( <ls_repo>->ms_data-key ).
|
||||
ls_overview-offline = <ls_repo>->ms_data-offline.
|
||||
ls_overview-key = <ls_repo>->ms_data-key.
|
||||
|
@ -840,7 +840,7 @@ CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD save_settings.
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_list_settings( ms_list_settings ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_list_settings( ms_list_settings ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -885,7 +885,7 @@ CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION.
|
|||
CASE ii_event->mv_action.
|
||||
WHEN c_action-select.
|
||||
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lv_key ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_show( lv_key ).
|
||||
|
||||
TRY.
|
||||
zcl_abapgit_repo_srv=>get_instance( )->get( lv_key )->refresh( ).
|
||||
|
|
|
@ -611,7 +611,7 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
super->constructor( ).
|
||||
|
||||
TRY.
|
||||
lo_persistence_user = zcl_abapgit_persistence_user=>get_instance( ).
|
||||
lo_persistence_user = zcl_abapgit_persist_factory=>get_user( ).
|
||||
|
||||
mv_key = iv_key.
|
||||
mi_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
|
||||
|
@ -632,7 +632,7 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
CATCH zcx_abapgit_exception INTO lx_error.
|
||||
" Reset 'last shown repo' so next start will go to repo overview
|
||||
" and allow troubleshooting of issue
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( || ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_show( || ).
|
||||
|
||||
RAISE EXCEPTION lx_error.
|
||||
ENDTRY.
|
||||
|
@ -1102,7 +1102,7 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
|
||||
|
||||
WHEN c_actions-toggle_hide_files. " Toggle file display
|
||||
mv_hide_files = zcl_abapgit_persistence_user=>get_instance( )->toggle_hide_files( ).
|
||||
mv_hide_files = zcl_abapgit_persist_factory=>get_user( )->toggle_hide_files( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
WHEN c_actions-change_dir. " Change dir
|
||||
|
@ -1113,16 +1113,16 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
WHEN c_actions-toggle_folders. " Toggle folder view
|
||||
mv_show_folders = zcl_abapgit_persistence_user=>get_instance( )->toggle_show_folders( ).
|
||||
mv_show_folders = zcl_abapgit_persist_factory=>get_user( )->toggle_show_folders( ).
|
||||
mv_cur_dir = '/'. " Root
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
WHEN c_actions-toggle_changes. " Toggle changes only view
|
||||
mv_changes_only = zcl_abapgit_persistence_user=>get_instance( )->toggle_changes_only( ).
|
||||
mv_changes_only = zcl_abapgit_persist_factory=>get_user( )->toggle_changes_only( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
WHEN c_actions-toggle_diff_first.
|
||||
mv_diff_first = zcl_abapgit_persistence_user=>get_instance( )->set_diff_first(
|
||||
mv_diff_first = zcl_abapgit_persist_factory=>get_user( )->set_diff_first(
|
||||
boolc( mv_diff_first = abap_false ) ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
|
@ -1131,13 +1131,13 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
WHEN zif_abapgit_definitions=>c_action-change_order_by.
|
||||
mv_order_by = zcl_abapgit_persistence_user=>get_instance( )->set_order_by(
|
||||
mv_order_by = zcl_abapgit_persist_factory=>get_user( )->set_order_by(
|
||||
ii_event->query( )->get( 'ORDERBY' ) ).
|
||||
mv_order_descending = zcl_abapgit_persistence_user=>get_instance( )->set_order_descending( abap_false ).
|
||||
mv_order_descending = zcl_abapgit_persist_factory=>get_user( )->set_order_descending( abap_false ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
WHEN zif_abapgit_definitions=>c_action-direction.
|
||||
mv_order_descending = zcl_abapgit_persistence_user=>get_instance( )->set_order_descending(
|
||||
mv_order_descending = zcl_abapgit_persist_factory=>get_user( )->set_order_descending(
|
||||
boolc( ii_event->query( )->get( 'DIRECTION' ) = 'DESCENDING' ) ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
|
@ -1393,7 +1393,7 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
|||
CATCH zcx_abapgit_exception INTO lx_error.
|
||||
" Reset 'last shown repo' so next start will go to repo overview
|
||||
" and allow troubleshooting of issue
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( || ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_show( || ).
|
||||
|
||||
RAISE EXCEPTION lx_error.
|
||||
ENDTRY.
|
||||
|
|
|
@ -229,7 +229,7 @@ CLASS zcl_abapgit_gui_page_tags IMPLEMENTATION.
|
|||
|
||||
DATA li_user TYPE REF TO zif_abapgit_persist_user.
|
||||
|
||||
li_user = zcl_abapgit_persistence_user=>get_instance( ).
|
||||
li_user = zcl_abapgit_persist_factory=>get_user( ).
|
||||
|
||||
rv_email = li_user->get_repo_git_user_email( mi_repo_online->get_url( ) ).
|
||||
IF rv_email IS INITIAL.
|
||||
|
@ -247,7 +247,7 @@ CLASS zcl_abapgit_gui_page_tags IMPLEMENTATION.
|
|||
|
||||
DATA li_user TYPE REF TO zif_abapgit_persist_user.
|
||||
|
||||
li_user = zcl_abapgit_persistence_user=>get_instance( ).
|
||||
li_user = zcl_abapgit_persist_factory=>get_user( ).
|
||||
|
||||
rv_user = li_user->get_repo_git_user_name( mi_repo_online->get_url( ) ).
|
||||
IF rv_user IS INITIAL.
|
||||
|
|
|
@ -258,7 +258,7 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
|
|||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN zif_abapgit_definitions=>c_action-go_home. " Go Home
|
||||
lv_last_repo_key = zcl_abapgit_persistence_user=>get_instance( )->get_repo_show( ).
|
||||
lv_last_repo_key = zcl_abapgit_persist_factory=>get_user( )->get_repo_show( ).
|
||||
|
||||
IF lv_last_repo_key IS NOT INITIAL.
|
||||
rs_handled-page = zcl_abapgit_gui_page_repo_view=>create( lv_last_repo_key ).
|
||||
|
|
|
@ -57,7 +57,7 @@ CLASS zcl_abapgit_services_git IMPLEMENTATION.
|
|||
DATA: ls_comment TYPE zif_abapgit_git_definitions=>ty_comment,
|
||||
li_user TYPE REF TO zif_abapgit_persist_user.
|
||||
|
||||
li_user = zcl_abapgit_persistence_user=>get_instance( ).
|
||||
li_user = zcl_abapgit_persist_factory=>get_user( ).
|
||||
li_user->set_repo_git_user_name( iv_url = ii_repo_online->get_url( )
|
||||
iv_username = is_commit-committer_name ).
|
||||
li_user->set_repo_git_user_email( iv_url = ii_repo_online->get_url( )
|
||||
|
|
|
@ -106,6 +106,13 @@ CLASS zcl_abapgit_services_repo DEFINITION
|
|||
!ct_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS popup_data_loss_overwrite
|
||||
IMPORTING
|
||||
!it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
CHANGING
|
||||
!ct_data_loss TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS popup_package_overwrite
|
||||
CHANGING
|
||||
!ct_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
|
||||
|
@ -390,7 +397,7 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION.
|
|||
toggle_favorite( ri_repo->get_key( ) ).
|
||||
|
||||
" Set default repo for user
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( ri_repo->get_key( ) ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_show( ri_repo->get_key( ) ).
|
||||
|
||||
COMMIT WORK AND WAIT.
|
||||
|
||||
|
@ -432,7 +439,7 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION.
|
|||
toggle_favorite( li_repo->get_key( ) ).
|
||||
|
||||
" Set default repo for user
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( li_repo->get_key( ) ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_show( li_repo->get_key( ) ).
|
||||
|
||||
COMMIT WORK AND WAIT.
|
||||
|
||||
|
@ -441,6 +448,69 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD popup_data_loss_overwrite.
|
||||
|
||||
DATA: lt_columns TYPE zif_abapgit_popups=>ty_alv_column_tt,
|
||||
lt_selected LIKE ct_data_loss,
|
||||
li_popups TYPE REF TO zif_abapgit_popups.
|
||||
DATA lt_preselected_rows TYPE zif_abapgit_popups=>ty_rows.
|
||||
|
||||
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF it_overwrite,
|
||||
<ls_data_loss> LIKE LINE OF ct_data_loss,
|
||||
<ls_column> TYPE zif_abapgit_popups=>ty_alv_column.
|
||||
|
||||
LOOP AT it_overwrite ASSIGNING <ls_overwrite> WHERE decision <> zif_abapgit_definitions=>c_yes.
|
||||
DELETE ct_data_loss WHERE obj_type = <ls_overwrite>-obj_type AND obj_name = <ls_overwrite>-obj_name.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( ct_data_loss ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
APPEND INITIAL LINE TO lt_columns ASSIGNING <ls_column>.
|
||||
<ls_column>-name = 'OBJ_TYPE'.
|
||||
APPEND INITIAL LINE TO lt_columns ASSIGNING <ls_column>.
|
||||
<ls_column>-name = 'OBJ_NAME'.
|
||||
APPEND INITIAL LINE TO lt_columns ASSIGNING <ls_column>.
|
||||
<ls_column>-name = 'ICON'.
|
||||
<ls_column>-text = 'Action'.
|
||||
<ls_column>-show_icon = abap_true.
|
||||
<ls_column>-length = 5.
|
||||
APPEND INITIAL LINE TO lt_columns ASSIGNING <ls_column>.
|
||||
<ls_column>-name = 'TEXT'.
|
||||
<ls_column>-text = 'Description'.
|
||||
|
||||
LOOP AT ct_data_loss ASSIGNING <ls_data_loss> WHERE decision = zif_abapgit_definitions=>c_yes.
|
||||
INSERT sy-tabix INTO TABLE lt_preselected_rows.
|
||||
ENDLOOP.
|
||||
|
||||
li_popups = zcl_abapgit_ui_factory=>get_popups( ).
|
||||
li_popups->popup_to_select_from_list(
|
||||
EXPORTING
|
||||
it_list = ct_data_loss
|
||||
iv_header_text = |Changes to the following objects could lead to DATA LOSS!|
|
||||
&& | Select the objects which should be changed to the remote version, anyway.|
|
||||
iv_select_column_text = 'Overwrite?'
|
||||
it_columns_to_display = lt_columns
|
||||
it_preselected_rows = lt_preselected_rows
|
||||
IMPORTING
|
||||
et_list = lt_selected ).
|
||||
|
||||
LOOP AT ct_data_loss ASSIGNING <ls_data_loss>.
|
||||
READ TABLE lt_selected WITH TABLE KEY object_type_and_name
|
||||
COMPONENTS obj_type = <ls_data_loss>-obj_type
|
||||
obj_name = <ls_data_loss>-obj_name
|
||||
TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc = 0.
|
||||
<ls_data_loss>-decision = zif_abapgit_definitions=>c_yes.
|
||||
ELSE.
|
||||
<ls_data_loss>-decision = zif_abapgit_definitions=>c_no.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD popup_decisions.
|
||||
|
||||
DATA:
|
||||
|
@ -479,6 +549,13 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
popup_objects_overwrite( CHANGING ct_overwrite = lt_decision ).
|
||||
|
||||
popup_data_loss_overwrite(
|
||||
EXPORTING
|
||||
it_overwrite = lt_decision
|
||||
CHANGING
|
||||
ct_data_loss = cs_checks-data_loss ).
|
||||
|
||||
popup_package_overwrite( CHANGING ct_overwrite = cs_checks-warning_package ).
|
||||
|
||||
IF cs_checks-transport-required = abap_true AND cs_checks-transport-transport IS INITIAL.
|
||||
|
@ -831,7 +908,7 @@ CLASS zcl_abapgit_services_repo IMPLEMENTATION.
|
|||
|
||||
METHOD toggle_favorite.
|
||||
|
||||
zcl_abapgit_persistence_user=>get_instance( )->toggle_favorite( iv_key ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->toggle_favorite( iv_key ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
|
|
@ -254,7 +254,7 @@ function RepoOverViewHelper(opts) {
|
|||
this.focusFilterKey = opts.focusFilterKey;
|
||||
}
|
||||
this.setHooks();
|
||||
this.pageId = "RepoOverViewHelperState"; // constant is OK for this case
|
||||
this.pageId = (opts && opts.pageId) ? opts.pageId : "RepoOverViewHelperState";
|
||||
this.isDetailsDisplayed = false;
|
||||
this.isOnlyFavoritesDisplayed = false;
|
||||
this.detailCssClass = findStyleSheetByName(".repo-overview .ro-detail");
|
||||
|
|
|
@ -36,14 +36,14 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_GUI_HOTKEY_CTL IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_gui_hotkey_ctl IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
super->constructor( ).
|
||||
|
||||
ms_user_settings = zcl_abapgit_persistence_user=>get_instance( )->get_settings( ).
|
||||
ms_user_settings = zcl_abapgit_persist_factory=>get_user( )->get_settings( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -165,7 +165,7 @@ CLASS ZCL_ABAPGIT_GUI_HOTKEY_CTL IMPLEMENTATION.
|
|||
ENDLOOP.
|
||||
|
||||
" render link hints activation key
|
||||
ls_user_settings = zcl_abapgit_persistence_user=>get_instance( )->get_settings( ).
|
||||
ls_user_settings = zcl_abapgit_persist_factory=>get_user( )->get_settings( ).
|
||||
IF ls_user_settings-link_hints_enabled = abap_true.
|
||||
ri_html->add( |<li>|
|
||||
&& |<span class="key-id">{ ls_user_settings-link_hint_key }</span>|
|
||||
|
|
|
@ -35,7 +35,7 @@ CLASS lcl_startup IMPLEMENTATION.
|
|||
ls_settings TYPE zif_abapgit_definitions=>ty_s_user_settings,
|
||||
li_user_persistence TYPE REF TO zif_abapgit_persist_user.
|
||||
|
||||
li_user_persistence = zcl_abapgit_persistence_user=>get_instance( ).
|
||||
li_user_persistence = zcl_abapgit_persist_factory=>get_user( ).
|
||||
|
||||
ls_settings = li_user_persistence->get_settings( ).
|
||||
|
||||
|
@ -72,7 +72,7 @@ CLASS lcl_startup IMPLEMENTATION.
|
|||
|
||||
IF zcl_abapgit_persist_factory=>get_settings( )->read( )->get_show_default_repo( ) = abap_false.
|
||||
" Don't show the last seen repo at startup
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( || ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_show( || ).
|
||||
ENDIF.
|
||||
|
||||
" We have three special cases for gui startup
|
||||
|
@ -88,7 +88,7 @@ CLASS lcl_startup IMPLEMENTATION.
|
|||
IF lv_repo_key IS NOT INITIAL.
|
||||
|
||||
SET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD '' ##EXISTS.
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lv_repo_key ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_show( lv_repo_key ).
|
||||
|
||||
ELSEIF lv_package IS NOT INITIAL.
|
||||
|
||||
|
@ -144,7 +144,7 @@ CLASS lcl_startup IMPLEMENTATION.
|
|||
ENDLOOP.
|
||||
|
||||
IF li_repo IS BOUND.
|
||||
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( li_repo->get_key( ) ).
|
||||
zcl_abapgit_persist_factory=>get_user( )->set_repo_show( li_repo->get_key( ) ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
|
|
|
@ -78,6 +78,7 @@ INTERFACE zif_abapgit_definitions
|
|||
BEGIN OF ty_deserialize_checks,
|
||||
overwrite TYPE ty_overwrite_tt,
|
||||
warning_package TYPE ty_overwrite_tt,
|
||||
data_loss TYPE ty_overwrite_tt,
|
||||
requirements TYPE ty_requirements,
|
||||
dependencies TYPE ty_dependencies,
|
||||
transport TYPE ty_transport,
|
||||
|
|
Loading…
Reference in New Issue
Block a user