Merge branch 'main' into mbtools/alav-ddic

This commit is contained in:
Lars Hvam 2025-05-03 10:21:42 +02:00 committed by GitHub
commit 3cfe1429c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
27 changed files with 454 additions and 267 deletions

View File

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

View File

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

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

View 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>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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");

View File

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

View File

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

View File

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