From 36fccd3b5261da4c39aeb1fc5f2f9f2835960d47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Sat, 10 Nov 2018 08:11:22 +0100 Subject: [PATCH] Fix TADIR handling #2066 (#2078) * AUTH + FORM: delete tadir * SFBS + SFBF: delete tadir * SFSW: synchronous deletion --- src/objects/zcl_abapgit_object_auth.clas.abap | 1 + src/objects/zcl_abapgit_object_form.clas.abap | 1 + src/objects/zcl_abapgit_object_sfbf.clas.abap | 3 ++ src/objects/zcl_abapgit_object_sfbs.clas.abap | 3 ++ src/objects/zcl_abapgit_object_sfsw.clas.abap | 50 ++++++++++++++++--- 5 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src/objects/zcl_abapgit_object_auth.clas.abap b/src/objects/zcl_abapgit_object_auth.clas.abap index afdd5d44a..5727204c2 100644 --- a/src/objects/zcl_abapgit_object_auth.clas.abap +++ b/src/objects/zcl_abapgit_object_auth.clas.abap @@ -121,6 +121,7 @@ CLASS zcl_abapgit_object_auth IMPLEMENTATION. METHOD zif_abapgit_object~get_metadata. rs_metadata = get_metadata( ). + rs_metadata-delete_tadir = abap_true. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_form.clas.abap b/src/objects/zcl_abapgit_object_form.clas.abap index 01bb4f2ec..b6d81842d 100644 --- a/src/objects/zcl_abapgit_object_form.clas.abap +++ b/src/objects/zcl_abapgit_object_form.clas.abap @@ -289,6 +289,7 @@ CLASS zcl_abapgit_object_form IMPLEMENTATION. METHOD zif_abapgit_object~get_metadata. rs_metadata = get_metadata( ). + rs_metadata-delete_tadir = abap_true. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_sfbf.clas.abap b/src/objects/zcl_abapgit_object_sfbf.clas.abap index 75e36bd72..6526a8ad9 100644 --- a/src/objects/zcl_abapgit_object_sfbf.clas.abap +++ b/src/objects/zcl_abapgit_object_sfbf.clas.abap @@ -134,6 +134,8 @@ CLASS zcl_abapgit_object_sfbf IMPLEMENTATION. lo_bf->set_parent_bfs( lt_parent_bfs ). set_default_package( iv_package ). + tadir_insert( iv_package ). + lo_bf->save_all( ). zcl_abapgit_objects_activation=>add_item( ms_item ). @@ -166,6 +168,7 @@ CLASS zcl_abapgit_object_sfbf IMPLEMENTATION. METHOD zif_abapgit_object~get_metadata. rs_metadata = get_metadata( ). rs_metadata-ddic = abap_true. + rs_metadata-delete_tadir = abap_true. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_sfbs.clas.abap b/src/objects/zcl_abapgit_object_sfbs.clas.abap index 9f233efd4..872406056 100644 --- a/src/objects/zcl_abapgit_object_sfbs.clas.abap +++ b/src/objects/zcl_abapgit_object_sfbs.clas.abap @@ -120,6 +120,8 @@ CLASS zcl_abapgit_object_sfbs IMPLEMENTATION. lo_bfs->set_nested_parent( lt_parent_bfs ). set_default_package( iv_package ). + tadir_insert( iv_package ). + lo_bfs->save_all( ). zcl_abapgit_objects_activation=>add_item( ms_item ). @@ -154,6 +156,7 @@ CLASS zcl_abapgit_object_sfbs IMPLEMENTATION. METHOD zif_abapgit_object~get_metadata. rs_metadata = get_metadata( ). rs_metadata-ddic = abap_true. + rs_metadata-delete_tadir = abap_true. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_sfsw.clas.abap b/src/objects/zcl_abapgit_object_sfsw.clas.abap index 735ae75e1..a4cf818bf 100644 --- a/src/objects/zcl_abapgit_object_sfsw.clas.abap +++ b/src/objects/zcl_abapgit_object_sfsw.clas.abap @@ -7,7 +7,8 @@ CLASS zcl_abapgit_object_sfsw DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje METHODS: get RETURNING VALUE(ro_switch) TYPE REF TO cl_sfw_sw - RAISING zcx_abapgit_exception. + RAISING zcx_abapgit_exception, + wait_for_background_job. ENDCLASS. @@ -62,6 +63,10 @@ CLASS zcl_abapgit_object_sfsw IMPLEMENTATION. lo_switch = cl_sfw_sw=>get_switch( lv_switch_id ). lo_switch->set_delete_flag( lv_switch_id ). lo_switch->save_all( ). + + " deletion via background job. Wait until the job is finished. + wait_for_background_job( ). + CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. zcx_abapgit_exception=>raise( 'Error deleting Switch' ). ENDTRY. @@ -110,6 +115,8 @@ CLASS zcl_abapgit_object_sfsw IMPLEMENTATION. lo_switch->set_conflicts( lt_conflicts ). set_default_package( iv_package ). + tadir_insert( iv_package ). + lo_switch->save_all( EXCEPTIONS not_saved = 1 @@ -158,6 +165,16 @@ CLASS zcl_abapgit_object_sfsw IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_object~is_active. + rv_active = is_active( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~is_locked. + rv_is_locked = abap_false. + ENDMETHOD. + + METHOD zif_abapgit_object~jump. CALL FUNCTION 'RS_TOOL_ACCESS' @@ -215,12 +232,31 @@ CLASS zcl_abapgit_object_sfsw IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_object~is_locked. - rv_is_locked = abap_false. + METHOD wait_for_background_job. + + DATA: lv_job_count TYPE tbtco-jobcount. + + " We wait for at most 5 seconds. If it takes + " more than that it probably doesn't matter, + " because we have other problems + + DO 5 TIMES. + + SELECT SINGLE jobcount + FROM tbtco + INTO lv_job_count + WHERE jobname = 'SFW_DELETE_SWITCH' + AND status = 'R' + AND sdluname = sy-uname. + + IF sy-subrc = 0. + WAIT UP TO 1 SECONDS. + ELSE. + EXIT. + ENDIF. + + ENDDO. + ENDMETHOD. - - METHOD zif_abapgit_object~is_active. - rv_active = is_active( ). - ENDMETHOD. ENDCLASS.