From 37390a521e0c282c21411ce0e501bad7d81a483f Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Fri, 23 Feb 2024 14:23:07 +0100 Subject: [PATCH] Change transport type when setting original system (#6816) Co-authored-by: Lars Hvam --- src/cts/zcl_abapgit_cts_api.clas.abap | 52 ++++++++++++++++++++++- src/cts/zif_abapgit_cts_api.intf.abap | 7 +++ src/objects/zcl_abapgit_objects.clas.abap | 23 +++++++--- 3 files changed, 75 insertions(+), 7 deletions(-) diff --git a/src/cts/zcl_abapgit_cts_api.clas.abap b/src/cts/zcl_abapgit_cts_api.clas.abap index 9141ea883..6d5d11d21 100644 --- a/src/cts/zcl_abapgit_cts_api.clas.abap +++ b/src/cts/zcl_abapgit_cts_api.clas.abap @@ -82,7 +82,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION. +CLASS zcl_abapgit_cts_api IMPLEMENTATION. METHOD get_current_transport_for_obj. @@ -213,6 +213,56 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_cts_api~change_transport_type. + + DATA ls_request_header TYPE trwbo_request_header. + + CALL FUNCTION 'ENQUEUE_E_TRKORR' + EXPORTING + trkorr = iv_transport_request + EXCEPTIONS + foreign_lock = 1 + system_failure = 2 + OTHERS = 3. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + CALL FUNCTION 'TRINT_READ_REQUEST_HEADER' + EXPORTING + iv_read_e070 = abap_true + iv_read_e070c = abap_true + CHANGING + cs_request = ls_request_header + EXCEPTIONS + empty_trkorr = 1 + not_exist_e070 = 2 + OTHERS = 3. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + CALL FUNCTION 'TRINT_CHANGE_TRFUNCTION' + EXPORTING + iv_new_trfunction = iv_transport_type + CHANGING + cs_request_header = ls_request_header + EXCEPTIONS + action_aborted_by_user = 1 + change_not_allowed = 2 + db_access_error = 3 + OTHERS = 4. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + CALL FUNCTION 'DEQUEUE_E_TRKORR' + EXPORTING + trkorr = iv_transport_request. + + ENDMETHOD. + + METHOD zif_abapgit_cts_api~confirm_transport_messages. TYPES: BEGIN OF ty_s_message, diff --git a/src/cts/zif_abapgit_cts_api.intf.abap b/src/cts/zif_abapgit_cts_api.intf.abap index e6e403d70..7d1fe045c 100644 --- a/src/cts/zif_abapgit_cts_api.intf.abap +++ b/src/cts/zif_abapgit_cts_api.intf.abap @@ -153,4 +153,11 @@ INTERFACE zif_abapgit_cts_api !iv_transport_request TYPE trkorr RAISING zcx_abapgit_exception . + + METHODS change_transport_type + IMPORTING + !iv_transport_request TYPE trkorr + !iv_transport_type TYPE trfunction + RAISING + zcx_abapgit_exception. ENDINTERFACE. diff --git a/src/objects/zcl_abapgit_objects.clas.abap b/src/objects/zcl_abapgit_objects.clas.abap index 3b55c4638..4d6372340 100644 --- a/src/objects/zcl_abapgit_objects.clas.abap +++ b/src/objects/zcl_abapgit_objects.clas.abap @@ -158,9 +158,10 @@ CLASS zcl_abapgit_objects DEFINITION 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 + !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 + !iv_transport TYPE trkorr RAISING zcx_abapgit_exception . CLASS-METHODS check_objects_locked @@ -869,9 +870,10 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. " 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( ) ). + it_items = lt_items + ii_log = ii_log + io_dot = io_repo->get_dot_abapgit( ) + iv_transport = is_checks-transport-transport ). zcl_abapgit_factory=>get_default_transport( )->reset( ). @@ -1336,6 +1338,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. METHOD update_original_system. DATA lv_srcsystem TYPE tadir-srcsystem. + DATA lv_errors TYPE abap_bool. DATA lv_msg TYPE string. FIELD-SYMBOLS LIKE LINE OF it_items. @@ -1392,10 +1395,18 @@ CLASS zcl_abapgit_objects IMPLEMENTATION. ii_log->add_error( iv_msg = lv_msg is_item = ). + lv_errors = abap_true. ENDIF. ENDIF. ENDLOOP. + IF lv_errors IS INITIAL. + " Since original system has changed, the type of transport request needs to be switched to "Repair" + zcl_abapgit_factory=>get_cts_api( )->change_transport_type( + iv_transport_request = iv_transport + iv_transport_type = zif_abapgit_cts_api=>c_transport_type-wb_repair ). + ENDIF. + ENDMETHOD.