From b751ff519e4d2acd74666b276d2b4cf3ba0b7e76 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Wed, 11 Sep 2024 13:52:41 +0200 Subject: [PATCH] basic FUGS serialization (#7045) Co-authored-by: Marc Bernard --- src/objects/zcl_abapgit_object_fugr.clas.abap | 9 ++- src/objects/zcl_abapgit_object_fugs.clas.abap | 17 +++++ src/objects/zcl_abapgit_object_fugs.clas.xml | 16 ++++ .../zcl_abapgit_objects_program.clas.abap | 73 ++++++++++++++++++- 4 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 src/objects/zcl_abapgit_object_fugs.clas.abap create mode 100644 src/objects/zcl_abapgit_object_fugs.clas.xml diff --git a/src/objects/zcl_abapgit_object_fugr.clas.abap b/src/objects/zcl_abapgit_object_fugr.clas.abap index fba1c2e05..0291cd10c 100644 --- a/src/objects/zcl_abapgit_object_fugr.clas.abap +++ b/src/objects/zcl_abapgit_object_fugr.clas.abap @@ -1,7 +1,11 @@ -CLASS zcl_abapgit_object_fugr DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_program FINAL. +CLASS zcl_abapgit_object_fugr DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_objects_program + CREATE PUBLIC . PUBLIC SECTION. - INTERFACES zif_abapgit_object. + + INTERFACES zif_abapgit_object . PROTECTED SECTION. PRIVATE SECTION. @@ -945,7 +949,6 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_includes. - lt_includes = includes( ). LOOP AT lt_includes ASSIGNING . diff --git a/src/objects/zcl_abapgit_object_fugs.clas.abap b/src/objects/zcl_abapgit_object_fugs.clas.abap new file mode 100644 index 000000000..e0d19655e --- /dev/null +++ b/src/objects/zcl_abapgit_object_fugs.clas.abap @@ -0,0 +1,17 @@ +CLASS zcl_abapgit_object_fugs DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_object_fugr + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + PROTECTED SECTION. + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS zcl_abapgit_object_fugs IMPLEMENTATION. +ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_fugs.clas.xml b/src/objects/zcl_abapgit_object_fugs.clas.xml new file mode 100644 index 000000000..54cdabde2 --- /dev/null +++ b/src/objects/zcl_abapgit_object_fugs.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_OBJECT_FUGS + E + abapGit - FUGS + 1 + X + X + X + + + + diff --git a/src/objects/zcl_abapgit_objects_program.clas.abap b/src/objects/zcl_abapgit_objects_program.clas.abap index e861123c9..093c1fa19 100644 --- a/src/objects/zcl_abapgit_objects_program.clas.abap +++ b/src/objects/zcl_abapgit_objects_program.clas.abap @@ -154,6 +154,7 @@ CLASS zcl_abapgit_objects_program DEFINITION !it_source TYPE abaptxt255_tab !iv_title TYPE repti !iv_package TYPE devclass + !iv_state TYPE progdir-state DEFAULT c_state-inactive RAISING zcx_abapgit_exception . METHODS update_program @@ -161,8 +162,22 @@ CLASS zcl_abapgit_objects_program DEFINITION !is_progdir TYPE zif_abapgit_sap_report=>ty_progdir !it_source TYPE abaptxt255_tab !iv_title TYPE repti + !iv_state TYPE progdir-state DEFAULT c_state-inactive RAISING zcx_abapgit_exception . + METHODS is_exit_include + IMPORTING + !iv_program TYPE syrepid + RETURNING + VALUE(rv_is_exit_include) TYPE abap_bool. + METHODS deserialize_exit_include + IMPORTING + !is_progdir TYPE zif_abapgit_sap_report=>ty_progdir + !it_source TYPE abaptxt255_tab + !it_tpool TYPE textpool_table + !iv_package TYPE devclass + RAISING + zcx_abapgit_exception. ENDCLASS. @@ -456,12 +471,53 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. ENDMETHOD. + METHOD deserialize_exit_include. + + DATA: + lv_progname TYPE reposrc-progname, + lv_title TYPE rglif-title. + + " Includes in SAP exit function groups must be processed in active state only + " (check in RS_INSERT_INTO_WORKING_AREA) + lv_title = get_program_title( it_tpool ). + + SELECT SINGLE progname FROM reposrc INTO lv_progname + WHERE progname = is_progdir-name + AND r3state = c_state-active. + + IF sy-subrc = 0. + update_program( + is_progdir = is_progdir + it_source = it_source + iv_title = lv_title + iv_state = '' ). + ELSE. + insert_program( + is_progdir = is_progdir + it_source = it_source + iv_title = lv_title + iv_package = iv_package + iv_state = '' ). + ENDIF. + + ENDMETHOD. + + METHOD deserialize_program. DATA: lv_progname TYPE reposrc-progname, lv_title TYPE rglif-title. + IF is_exit_include( is_progdir-name ) = abap_true. + deserialize_exit_include( + is_progdir = is_progdir + it_source = it_source + it_tpool = it_tpool + iv_package = iv_package ). + RETURN. + ENDIF. + zcl_abapgit_factory=>get_cts_api( )->insert_transport_object( iv_object = 'ABAP' iv_obj_name = is_progdir-name @@ -579,7 +635,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. program_name = is_progdir-name program_type = is_progdir-subc title_string = iv_title - save_inactive = c_state-inactive + save_inactive = iv_state suppress_dialog = abap_true uccheck = is_progdir-uccheck " does not exist on lower releases TABLES @@ -597,7 +653,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. program_name = is_progdir-name program_type = is_progdir-subc title_string = iv_title - save_inactive = c_state-inactive + save_inactive = iv_state suppress_dialog = abap_true TABLES source_extended = it_source @@ -674,6 +730,13 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. ENDMETHOD. + METHOD is_exit_include. + rv_is_exit_include = boolc( + iv_program CP 'LX*' OR iv_program CP 'SAPLX*' OR + iv_program+1 CP '/LX*' OR iv_program+1 CP '/SAPLX*' ). + ENDMETHOD. + + METHOD is_text_locked. DATA: lv_object TYPE eqegraarg. @@ -1062,7 +1125,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. EXPORTING program_name = is_progdir-name title_string = iv_title - save_inactive = c_state-inactive + save_inactive = iv_state TABLES source_extended = it_source EXCEPTIONS @@ -1080,7 +1143,9 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. " for generated table maintenance function groups, the author is set to SAP* instead of the user which " generates the function group. This hits some standard checks, pulling new code again sets the author " to the current user which avoids the check - zcx_abapgit_exception=>raise( |Delete function group and pull again, { is_progdir-name } (EU522)| ). + IF is_exit_include( is_progdir-name ) = abap_false. + zcx_abapgit_exception=>raise( |Delete function group and pull again, { is_progdir-name } (EU522)| ). + ENDIF. ELSE. zcx_abapgit_exception=>raise_t100( ). ENDIF.