mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
New feature: Original system (#6715)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
314caccdd1
commit
543935a160
|
@ -174,6 +174,7 @@
|
|||
"^cl_srvd_wb_object_data$",
|
||||
"^cl_wb_object_operator_factory$",
|
||||
"^cl_wer_const$",
|
||||
"^cl_xco_",
|
||||
"^cx_aff_",
|
||||
"^cx_wb_object_operation_error$",
|
||||
"^cx_xco_",
|
||||
|
@ -188,10 +189,12 @@
|
|||
"^if_wb_adt_plugin_resource_co$",
|
||||
"^if_wb_object_data_selection_co$",
|
||||
"^if_wb_object_operator$",
|
||||
"^if_xco_",
|
||||
"^int4$",
|
||||
"^numc2$",
|
||||
"^sabp_t_tadir_keys$",
|
||||
"^sap_bool$",
|
||||
"^srcsystem$",
|
||||
"^stringtab$",
|
||||
"^sychar01$",
|
||||
"^sychar10$",
|
||||
|
|
|
@ -149,6 +149,20 @@ CLASS zcl_abapgit_objects DEFINITION
|
|||
!ct_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS check_original_system
|
||||
IMPORTING
|
||||
!it_items TYPE zif_abapgit_definitions=>ty_items_tt
|
||||
!ii_log TYPE REF TO zif_abapgit_log
|
||||
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS update_original_system
|
||||
IMPORTING
|
||||
!it_items TYPE zif_abapgit_definitions=>ty_items_tt
|
||||
!ii_log TYPE REF TO zif_abapgit_log
|
||||
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS check_objects_locked
|
||||
IMPORTING
|
||||
!it_items TYPE zif_abapgit_definitions=>ty_items_tt
|
||||
|
@ -340,6 +354,35 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD check_original_system.
|
||||
|
||||
DATA:
|
||||
lv_srcsystem TYPE tadir-srcsystem,
|
||||
lv_error TYPE abap_bool.
|
||||
|
||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF it_items.
|
||||
|
||||
lv_srcsystem = io_dot->get_original_system( ).
|
||||
IF lv_srcsystem IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ii_log->add_info( |>> Checking original system| ).
|
||||
|
||||
LOOP AT it_items ASSIGNING <ls_item> WHERE srcsystem <> lv_srcsystem AND srcsystem IS NOT INITIAL.
|
||||
ii_log->add_error(
|
||||
iv_msg = |Object belongs to system { <ls_item>-srcsystem }. Can't overwrite it from system { lv_srcsystem }|
|
||||
is_item = <ls_item> ).
|
||||
lv_error = abap_true.
|
||||
ENDLOOP.
|
||||
|
||||
IF lv_error = abap_true.
|
||||
zcx_abapgit_exception=>raise( 'Error trying to overwrite object from different system' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD class_name.
|
||||
|
||||
CONCATENATE 'ZCL_ABAPGIT_OBJECT_' is_item-obj_type INTO rv_class_name.
|
||||
|
@ -678,6 +721,12 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
|
||||
check_objects_locked( lt_items ).
|
||||
|
||||
" Check the original system of all objects to prevent overwritting
|
||||
check_original_system(
|
||||
it_items = lt_items
|
||||
ii_log = ii_log
|
||||
io_dot = io_repo->get_dot_abapgit( ) ).
|
||||
|
||||
lo_i18n_params = zcl_abapgit_i18n_params=>new( is_params = determine_i18n_params(
|
||||
io_dot = io_repo->get_dot_abapgit( )
|
||||
iv_main_language_only = io_repo->get_local_settings( )-main_language_only ) ).
|
||||
|
@ -792,7 +841,6 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
io_files = lo_files ).
|
||||
ENDIF.
|
||||
|
||||
|
||||
CATCH zcx_abapgit_exception INTO lx_exc.
|
||||
ii_log->add_exception( ix_exc = lx_exc
|
||||
is_item = ls_item ).
|
||||
|
@ -819,6 +867,12 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
|
||||
update_package_tree( io_repo->get_package( ) ).
|
||||
|
||||
" Set the original system for all updated objects to what's defined in repo settings
|
||||
update_original_system(
|
||||
it_items = lt_items
|
||||
ii_log = ii_log
|
||||
io_dot = io_repo->get_dot_abapgit( ) ).
|
||||
|
||||
zcl_abapgit_factory=>get_default_transport( )->reset( ).
|
||||
|
||||
lo_timer->end( abap_true ).
|
||||
|
@ -1137,6 +1191,8 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
ls_item-devclass = <ls_result>-package.
|
||||
ls_item-obj_type = <ls_result>-obj_type.
|
||||
ls_item-obj_name = <ls_result>-obj_name.
|
||||
ls_item-srcsystem = <ls_result>-srcsystem.
|
||||
ls_item-origlang = <ls_result>-origlang.
|
||||
INSERT ls_item INTO TABLE rt_items.
|
||||
|
||||
ENDLOOP.
|
||||
|
@ -1154,6 +1210,8 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
ls_item-devclass = <ls_tadir>-devclass.
|
||||
ls_item-obj_type = <ls_tadir>-object.
|
||||
ls_item-obj_name = <ls_tadir>-obj_name.
|
||||
ls_item-srcsystem = <ls_tadir>-srcsystem.
|
||||
ls_item-origlang = <ls_tadir>-masterlang.
|
||||
INSERT ls_item INTO TABLE rt_items.
|
||||
|
||||
ENDLOOP.
|
||||
|
@ -1275,6 +1333,72 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD update_original_system.
|
||||
|
||||
DATA lv_srcsystem TYPE tadir-srcsystem.
|
||||
DATA lv_msg TYPE string.
|
||||
|
||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF it_items.
|
||||
|
||||
lv_srcsystem = io_dot->get_original_system( ).
|
||||
IF lv_srcsystem IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ii_log->add_info( |>> Setting original system| ).
|
||||
|
||||
LOOP AT it_items ASSIGNING <ls_item>.
|
||||
" Local packages are not stored in TADIR
|
||||
IF <ls_item>-obj_type = 'DEVC' AND <ls_item>-obj_name(1) = '$'.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
IF exists( <ls_item> ) = abap_true.
|
||||
CALL FUNCTION 'TR_TADIR_INTERFACE'
|
||||
EXPORTING
|
||||
wi_tadir_pgmid = 'R3TR'
|
||||
wi_tadir_object = <ls_item>-obj_type
|
||||
wi_tadir_obj_name = <ls_item>-obj_name
|
||||
wi_tadir_srcsystem = lv_srcsystem
|
||||
wi_test_modus = abap_false
|
||||
EXCEPTIONS
|
||||
tadir_entry_not_existing = 1
|
||||
tadir_entry_ill_type = 2
|
||||
no_systemname = 3
|
||||
no_systemtype = 4
|
||||
original_system_conflict = 5
|
||||
object_reserved_for_devclass = 6
|
||||
object_exists_global = 7
|
||||
object_exists_local = 8
|
||||
object_is_distributed = 9
|
||||
obj_specification_not_unique = 10
|
||||
no_authorization_to_delete = 11
|
||||
devclass_not_existing = 12
|
||||
simultanious_set_remove_repair = 13
|
||||
order_missing = 14
|
||||
no_modification_of_head_syst = 15
|
||||
pgmid_object_not_allowed = 16
|
||||
masterlanguage_not_specified = 17
|
||||
devclass_not_specified = 18
|
||||
specify_owner_unique = 19
|
||||
loc_priv_objs_no_repair = 20
|
||||
gtadir_not_reached = 21
|
||||
object_locked_for_order = 22
|
||||
change_of_class_not_allowed = 23
|
||||
no_change_from_sap_to_tmp = 24
|
||||
OTHERS = 25.
|
||||
IF sy-subrc <> 0.
|
||||
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
|
||||
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_msg.
|
||||
ii_log->add_error(
|
||||
iv_msg = lv_msg
|
||||
is_item = <ls_item> ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD update_package_tree.
|
||||
|
||||
DATA: lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt,
|
||||
|
|
|
@ -103,6 +103,13 @@ CLASS zcl_abapgit_dot_abapgit DEFINITION
|
|||
METHODS set_abap_language_version
|
||||
IMPORTING
|
||||
!iv_abap_language_version TYPE string .
|
||||
METHODS get_original_system
|
||||
RETURNING
|
||||
VALUE(rv_original_system) TYPE string .
|
||||
METHODS set_original_system
|
||||
IMPORTING
|
||||
!iv_original_system TYPE csequence .
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
@ -234,6 +241,11 @@ CLASS zcl_abapgit_dot_abapgit IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_original_system.
|
||||
rv_original_system = ms_data-original_system.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_requirements.
|
||||
rt_requirements = ms_data-requirements.
|
||||
ENDMETHOD.
|
||||
|
@ -343,6 +355,11 @@ CLASS zcl_abapgit_dot_abapgit IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_original_system.
|
||||
ms_data-original_system = iv_original_system.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_requirements.
|
||||
ms_data-requirements = it_requirements.
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -220,8 +220,8 @@ CLASS zcl_abapgit_repo_status IMPLEMENTATION.
|
|||
rs_result-obj_type = ls_item-obj_type.
|
||||
rs_result-obj_name = ls_item-obj_name.
|
||||
rs_result-package = ls_item-devclass.
|
||||
rs_result-srcsystem = sy-sysid.
|
||||
rs_result-origlang = sy-langu.
|
||||
rs_result-srcsystem = ''.
|
||||
rs_result-origlang = ''.
|
||||
|
||||
READ TABLE it_state_idx INTO ls_file_sig
|
||||
WITH KEY
|
||||
|
|
|
@ -21,6 +21,7 @@ INTERFACE zif_abapgit_dot_abapgit PUBLIC.
|
|||
requirements TYPE ty_requirement_tt,
|
||||
version_constant TYPE string,
|
||||
abap_language_version TYPE string,
|
||||
original_system TYPE tadir-srcsystem,
|
||||
END OF ty_dot_abapgit .
|
||||
|
||||
CONSTANTS:
|
||||
|
|
|
@ -42,6 +42,7 @@ CLASS zcl_abapgit_gui_page_sett_repo DEFINITION
|
|||
version_constant TYPE string VALUE 'version_constant',
|
||||
version_value TYPE string VALUE 'version_value',
|
||||
abap_langu_vers TYPE string VALUE 'abap_langu_vers',
|
||||
original_system TYPE string VALUE 'original_system',
|
||||
END OF c_id.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_event,
|
||||
|
@ -193,7 +194,13 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
|
|||
iv_width = '30%'
|
||||
)->column(
|
||||
iv_label = 'Minimum Patch'
|
||||
iv_width = '30%' ).
|
||||
iv_width = '30%'
|
||||
)->text(
|
||||
iv_name = c_id-original_system
|
||||
iv_label = 'Original System'
|
||||
iv_upper_case = abap_true
|
||||
iv_max = 3
|
||||
iv_hint = 'Sets the source system of objects during deserialize in downstream systems' ).
|
||||
|
||||
IF zcl_abapgit_feature=>is_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ) = abap_true.
|
||||
ro_form->radio(
|
||||
|
@ -332,6 +339,10 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
|
|||
iv_val = ls_dot-abap_language_version ).
|
||||
ENDIF.
|
||||
|
||||
ro_form_data->set(
|
||||
iv_key = c_id-original_system
|
||||
iv_val = ls_dot-original_system ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -350,6 +361,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
|
|||
lo_dot->set_folder_logic( mo_form_data->get( c_id-folder_logic ) ).
|
||||
lo_dot->set_starting_folder( mo_form_data->get( c_id-starting_folder ) ).
|
||||
lo_dot->set_version_constant( mo_form_data->get( c_id-version_constant ) ).
|
||||
lo_dot->set_original_system( mo_form_data->get( c_id-original_system ) ).
|
||||
|
||||
IF zcl_abapgit_feature=>is_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ) = abap_true.
|
||||
lo_dot->set_abap_language_version( mo_form_data->get( c_id-abap_langu_vers ) ).
|
||||
|
@ -406,6 +418,8 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
|
|||
|
||||
METHOD validate_form.
|
||||
|
||||
CONSTANTS lc_allowed(36) TYPE c VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.
|
||||
|
||||
DATA:
|
||||
lt_lang_list TYPE zif_abapgit_definitions=>ty_languages,
|
||||
lv_folder TYPE string,
|
||||
|
@ -414,6 +428,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
|
|||
lv_min_release TYPE zif_abapgit_dot_abapgit=>ty_requirement-min_release,
|
||||
lv_min_patch TYPE zif_abapgit_dot_abapgit=>ty_requirement-min_patch,
|
||||
lv_version_constant TYPE string,
|
||||
lv_original_system TYPE string,
|
||||
lx_exception TYPE REF TO zcx_abapgit_exception.
|
||||
|
||||
ro_validation_log = zcl_abapgit_html_form_utils=>create( mo_form )->validate( io_form_data ).
|
||||
|
@ -470,6 +485,13 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
|
|||
iv_val = 'LXE approach requires a non-empty list of languages' ).
|
||||
ENDIF.
|
||||
|
||||
lv_original_system = io_form_data->get( c_id-original_system ).
|
||||
IF lv_original_system CN lc_allowed.
|
||||
ro_validation_log->set(
|
||||
iv_key = c_id-original_system
|
||||
iv_val = 'System name must be alphanumerical' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user