From e2197ab344aedf3e8b03c1f59d6dfa0046726538 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 12 Jan 2018 11:36:33 +0000 Subject: [PATCH] lcl_sap_package to global --- src/zabapgit_folder_logic.prog.abap | 54 ++--- src/zabapgit_forms.prog.abap | 4 +- src/zabapgit_objects_impl.prog.abap | 4 +- src/zabapgit_sap_package.prog.abap | 285 +----------------------- src/zabapgit_services_abapgit.prog.abap | 2 +- src/zabapgit_transport.prog.abap | 8 +- src/zabapgit_unit_test.prog.abap | 2 +- src/zcl_abapgit_sap_package.clas.abap | 260 +++++++++++++++++++++ src/zcl_abapgit_sap_package.clas.xml | 18 ++ src/zif_abapgit_sap_package.intf.abap | 18 ++ src/zif_abapgit_sap_package.intf.xml | 16 ++ 11 files changed, 350 insertions(+), 321 deletions(-) create mode 100644 src/zcl_abapgit_sap_package.clas.abap create mode 100644 src/zcl_abapgit_sap_package.clas.xml create mode 100644 src/zif_abapgit_sap_package.intf.abap create mode 100644 src/zif_abapgit_sap_package.intf.xml diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 7b20d834e..275994705 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -65,10 +65,10 @@ CLASS lcl_folder_logic IMPLEMENTATION. TRANSLATE rv_package TO UPPER CASE. - IF lcl_sap_package=>get( rv_package )->exists( ) = abap_false AND + IF zcl_abapgit_sap_package=>get( rv_package )->exists( ) = abap_false AND iv_create_if_not_exists = abap_true. - lcl_sap_package=>get( lv_parent )->create_child( rv_package ). + zcl_abapgit_sap_package=>get( lv_parent )->create_child( rv_package ). ENDIF. lv_parent = rv_package. @@ -86,7 +86,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. IF iv_top = iv_package. rv_path = io_dot->get_starting_folder( ). ELSE. - lv_parentcl = lcl_sap_package=>get( iv_package )->read_parent( ). + lv_parentcl = zcl_abapgit_sap_package=>get( iv_package )->read_parent( ). IF lv_parentcl IS INITIAL. zcx_abapgit_exception=>raise( |error, expected parent package, { iv_package }| ). @@ -193,7 +193,7 @@ ENDCLASS. CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. PUBLIC SECTION. - INTERFACES: lif_sap_package. + INTERFACES: zif_abapgit_sap_package. PRIVATE SECTION. CONSTANTS: lc_top TYPE devclass VALUE '$TOP', @@ -212,46 +212,46 @@ ENDCLASS. "ltcl_convert DEFINITION CLASS ltcl_folder_logic IMPLEMENTATION. - METHOD lif_sap_package~list_subpackages. + METHOD zif_abapgit_sap_package~list_subpackages. RETURN. ENDMETHOD. - METHOD lif_sap_package~list_superpackages. + METHOD zif_abapgit_sap_package~list_superpackages. RETURN. ENDMETHOD. - METHOD lif_sap_package~read_parent. + METHOD zif_abapgit_sap_package~read_parent. rv_parentcl = '$TOP'. ENDMETHOD. - METHOD lif_sap_package~create_child. + METHOD zif_abapgit_sap_package~create_child. RETURN. ENDMETHOD. - METHOD lif_sap_package~exists. + METHOD zif_abapgit_sap_package~exists. rv_bool = abap_true. ENDMETHOD. METHOD setup. - FIELD-SYMBOLS: LIKE LINE OF lcl_sap_package=>gt_injected. + FIELD-SYMBOLS: LIKE LINE OF zcl_abapgit_sap_package=>gt_injected. - CLEAR lcl_sap_package=>gt_injected. + CLEAR zcl_abapgit_sap_package=>gt_injected. - APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . -package = '$TOP'. -object = me. - APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . -package = '$TOP_FOO'. -object = me. - APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . -package = '$FOOBAR'. -object = me. ENDMETHOD. METHOD teardown. - CLEAR lcl_sap_package=>gt_injected. + CLEAR zcl_abapgit_sap_package=>gt_injected. ENDMETHOD. METHOD prefix1. @@ -309,7 +309,7 @@ ENDCLASS. CLASS ltcl_folder_logic_namespaces DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. PUBLIC SECTION. - INTERFACES: lif_sap_package. + INTERFACES: zif_abapgit_sap_package. PRIVATE SECTION. CONSTANTS: lc_top TYPE devclass VALUE '/TEST/TOOLS', @@ -327,46 +327,46 @@ ENDCLASS. "ltcl_convert DEFINITION CLASS ltcl_folder_logic_namespaces IMPLEMENTATION. - METHOD lif_sap_package~list_subpackages. + METHOD zif_abapgit_sap_package~list_subpackages. RETURN. ENDMETHOD. - METHOD lif_sap_package~list_superpackages. + METHOD zif_abapgit_sap_package~list_superpackages. RETURN. ENDMETHOD. - METHOD lif_sap_package~read_parent. + METHOD zif_abapgit_sap_package~read_parent. rv_parentcl = lc_top. ENDMETHOD. - METHOD lif_sap_package~create_child. + METHOD zif_abapgit_sap_package~create_child. RETURN. ENDMETHOD. - METHOD lif_sap_package~exists. + METHOD zif_abapgit_sap_package~exists. rv_bool = abap_true. ENDMETHOD. METHOD setup. - FIELD-SYMBOLS: LIKE LINE OF lcl_sap_package=>gt_injected. + FIELD-SYMBOLS: LIKE LINE OF zcl_abapgit_sap_package=>gt_injected. - CLEAR lcl_sap_package=>gt_injected. + CLEAR zcl_abapgit_sap_package=>gt_injected. - APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . -package = '/TEST/TOOLS'. -object = me. - APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . -package = '/TEST/T1'. -object = me. - APPEND INITIAL LINE TO lcl_sap_package=>gt_injected ASSIGNING . + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . -package = '/TEST/TOOLS_T1'. -object = me. ENDMETHOD. METHOD teardown. - CLEAR lcl_sap_package=>gt_injected. + CLEAR zcl_abapgit_sap_package=>gt_injected. ENDMETHOD. METHOD prefix1. diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index 24a164b26..0410cf56d 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -110,7 +110,7 @@ FORM branch_popup TABLES tt_fields TYPE zif_abapgit_definitions=>ty_sval_tt RETURN. ENDIF. - lcl_sap_package=>create( ls_package_data ). + zcl_abapgit_sap_package=>create( ls_package_data ). COMMIT WORK. -value = ls_package_data-devclass. @@ -145,7 +145,7 @@ FORM package_popup TABLES tt_fields TYPE zif_abapgit_definitions=>ty_sval_tt RETURN. ENDIF. - lcl_sap_package=>create( ls_package_data ). + zcl_abapgit_sap_package=>create( ls_package_data ). COMMIT WORK. -value = ls_package_data-devclass. diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 6dff9f1a6..d25312359 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -93,12 +93,12 @@ CLASS lcl_objects IMPLEMENTATION. METHOD update_package_tree. - DATA: lt_packages TYPE lif_sap_package=>ty_devclass_tt, + DATA: lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt, lv_package LIKE LINE OF lt_packages, lv_tree TYPE dirtree-tname. - lt_packages = lcl_sap_package=>get( iv_package )->list_subpackages( ). + lt_packages = zcl_abapgit_sap_package=>get( iv_package )->list_subpackages( ). APPEND iv_package TO lt_packages. LOOP AT lt_packages INTO lv_package. diff --git a/src/zabapgit_sap_package.prog.abap b/src/zabapgit_sap_package.prog.abap index aecb9e725..be66cbe23 100644 --- a/src/zabapgit_sap_package.prog.abap +++ b/src/zabapgit_sap_package.prog.abap @@ -2,287 +2,4 @@ *& Include ZABAPGIT_SAP_PACKAGE *&---------------------------------------------------------------------* -INTERFACE lif_sap_package. - - TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY. - - METHODS: - list_subpackages - RETURNING VALUE(rt_list) TYPE ty_devclass_tt, - list_superpackages - RETURNING VALUE(rt_list) TYPE ty_devclass_tt, - read_parent - RETURNING VALUE(rv_parentcl) TYPE tdevc-parentcl, - create_child - IMPORTING iv_child TYPE devclass - RAISING zcx_abapgit_exception, - exists - RETURNING VALUE(rv_bool) TYPE abap_bool. - -ENDINTERFACE. - -CLASS ltcl_folder_logic DEFINITION DEFERRED. -CLASS ltcl_folder_logic_namespaces DEFINITION DEFERRED. - -*----------------------------------------------------------------------* -* CLASS lcl_package DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_sap_package DEFINITION FINAL CREATE PRIVATE - FRIENDS - ltcl_folder_logic - ltcl_folder_logic_namespaces. - - PUBLIC SECTION. - CLASS-METHODS: - get - IMPORTING iv_package TYPE devclass - RETURNING VALUE(ri_package) TYPE REF TO lif_sap_package, - create - IMPORTING is_package TYPE scompkdtln - RAISING zcx_abapgit_exception, - create_local - IMPORTING iv_package TYPE devclass - RAISING zcx_abapgit_exception. - - METHODS: - constructor - IMPORTING iv_package TYPE devclass. - - INTERFACES: lif_sap_package. - - PRIVATE SECTION. - TYPES: BEGIN OF ty_injected, - package TYPE devclass, - object TYPE REF TO lif_sap_package, - END OF ty_injected. - - CLASS-DATA: gt_injected TYPE STANDARD TABLE OF ty_injected. - - DATA: mv_package TYPE devclass. - -ENDCLASS. "lcl_package DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_package IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_sap_package IMPLEMENTATION. - - METHOD get. - - FIELD-SYMBOLS: LIKE LINE OF gt_injected. - - IF lines( gt_injected ) > 0. - READ TABLE gt_injected ASSIGNING WITH KEY package = iv_package. - ASSERT sy-subrc = 0. " unit test should be in control - ri_package = -object. - ELSE. - CREATE OBJECT ri_package TYPE lcl_sap_package - EXPORTING - iv_package = iv_package. - ENDIF. - - ENDMETHOD. - - METHOD constructor. - mv_package = iv_package. - ENDMETHOD. - - METHOD lif_sap_package~exists. - - cl_package_factory=>load_package( - EXPORTING - i_package_name = mv_package - EXCEPTIONS - object_not_existing = 1 - unexpected_error = 2 - intern_err = 3 - no_access = 4 - object_locked_and_modified = 5 ). - rv_bool = boolc( sy-subrc <> 1 ). - - ENDMETHOD. - - METHOD lif_sap_package~create_child. - - DATA: li_parent TYPE REF TO if_package, - ls_child TYPE scompkdtln. - - - cl_package_factory=>load_package( - EXPORTING - i_package_name = mv_package - IMPORTING - e_package = li_parent - EXCEPTIONS - object_not_existing = 1 - unexpected_error = 2 - intern_err = 3 - no_access = 4 - object_locked_and_modified = 5 ). - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'error reading parent package' ). - ENDIF. - - ls_child-devclass = iv_child. - ls_child-dlvunit = li_parent->software_component. - ls_child-ctext = iv_child. - ls_child-parentcl = mv_package. - ls_child-pdevclass = li_parent->transport_layer. - ls_child-as4user = sy-uname. - - create( ls_child ). - - ENDMETHOD. - - METHOD create. - - DATA: lv_err TYPE string, - li_package TYPE REF TO if_package, - ls_package LIKE is_package. - - - ASSERT NOT is_package-devclass IS INITIAL. - - cl_package_factory=>load_package( - EXPORTING - i_package_name = is_package-devclass - EXCEPTIONS - object_not_existing = 1 - unexpected_error = 2 - intern_err = 3 - no_access = 4 - object_locked_and_modified = 5 ). - IF sy-subrc = 0. - " Package already exists. We assume this is fine. Its properties might be changed later at - " DEVC deserialization. - RETURN. - ENDIF. - - ls_package = is_package. - - " Set software component to 'HOME' if none is set at this point. - " Otherwise SOFTWARE_COMPONENT_INVALID will be raised. - IF ls_package-dlvunit IS INITIAL. - ls_package-dlvunit = 'HOME'. - ENDIF. - - cl_package_factory=>create_new_package( - EXPORTING - i_reuse_deleted_object = abap_true -* i_suppress_dialog = abap_true " does not exist in 730 - IMPORTING - e_package = li_package - CHANGING - c_package_data = ls_package - EXCEPTIONS - object_already_existing = 1 - object_just_created = 2 - not_authorized = 3 - wrong_name_prefix = 4 - undefined_name = 5 - reserved_local_name = 6 - invalid_package_name = 7 - short_text_missing = 8 - software_component_invalid = 9 - layer_invalid = 10 - author_not_existing = 11 - component_not_existing = 12 - component_missing = 13 - prefix_in_use = 14 - unexpected_error = 15 - intern_err = 16 - no_access = 17 -* invalid_translation_depth = 18 -* wrong_mainpack_value = 19 -* superpackage_invalid = 20 -* error_in_cts_checks = 21 - OTHERS = 18 ). - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Package { is_package-devclass } could not be created| ). - ENDIF. - - li_package->save( -* EXPORTING -* i_suppress_dialog = abap_true " Controls whether popups can be transmitted - EXCEPTIONS - object_invalid = 1 - object_not_changeable = 2 - cancelled_in_corr = 3 - permission_failure = 4 - unexpected_error = 5 - intern_err = 6 - OTHERS = 7 ). - 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_err. - zcx_abapgit_exception=>raise( lv_err ). - ENDIF. - - li_package->set_changeable( abap_false ). - - ENDMETHOD. - - METHOD lif_sap_package~read_parent. - - SELECT SINGLE parentcl FROM tdevc INTO rv_parentcl - WHERE devclass = mv_package. "#EC CI_SUBRC "#EC CI_GENBUFF - ASSERT sy-subrc = 0. - - ENDMETHOD. - - METHOD lif_sap_package~list_superpackages. - - DATA: lt_list LIKE rt_list, - lv_parent TYPE tdevc-parentcl. - - - APPEND mv_package TO rt_list. - - SELECT SINGLE parentcl INTO lv_parent - FROM tdevc WHERE devclass = mv_package. "#EC CI_GENBUFF - - IF sy-subrc = 0 AND NOT lv_parent IS INITIAL. - APPEND lv_parent TO rt_list. - lt_list = get( lv_parent )->list_superpackages( ). - APPEND LINES OF lt_list TO rt_list. - ENDIF. - - ENDMETHOD. - - METHOD lif_sap_package~list_subpackages. - - DATA: lt_list LIKE rt_list, - lv_devclass LIKE LINE OF rt_list. - - - SELECT devclass INTO TABLE rt_list - FROM tdevc WHERE parentcl = mv_package. "#EC CI_GENBUFF "#EC CI_SUBRC - -* note the recursion, since packages are added to the list - LOOP AT rt_list INTO lv_devclass. - lt_list = get( lv_devclass )->list_subpackages( ). - APPEND LINES OF lt_list TO rt_list. - ENDLOOP. - - ENDMETHOD. - - METHOD create_local. - - DATA: ls_package TYPE scompkdtln. - - - ls_package-devclass = iv_package. - ls_package-ctext = iv_package. - ls_package-parentcl = '$TMP'. - ls_package-dlvunit = 'LOCAL'. - ls_package-as4user = sy-uname. - - create( ls_package ). - - ENDMETHOD. "create - -ENDCLASS. "lcl_package IMPLEMENTATION +* todo, include to be deleted diff --git a/src/zabapgit_services_abapgit.prog.abap b/src/zabapgit_services_abapgit.prog.abap index cfb98e587..92839e88c 100644 --- a/src/zabapgit_services_abapgit.prog.abap +++ b/src/zabapgit_services_abapgit.prog.abap @@ -137,7 +137,7 @@ CLASS lcl_services_abapgit IMPLEMENTATION. iv_url = iv_url iv_target_package = iv_package ). - lcl_sap_package=>create_local( iv_package ). + zcl_abapgit_sap_package=>create_local( iv_package ). lo_repo = lcl_app=>repo_srv( )->new_online( iv_url = iv_url diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index ab3e7b66d..fa23149f8 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -80,8 +80,8 @@ CLASS lcl_transport IMPLEMENTATION. METHOD find_top_package. * assumption: all objects in transport share a common super package - DATA: lt_obj TYPE lif_sap_package=>ty_devclass_tt, - lt_super TYPE lif_sap_package=>ty_devclass_tt, + DATA: lt_obj TYPE zif_abapgit_sap_package=>ty_devclass_tt, + lt_super TYPE zif_abapgit_sap_package=>ty_devclass_tt, lv_super LIKE LINE OF lt_super, lv_index TYPE i. @@ -90,10 +90,10 @@ CLASS lcl_transport IMPLEMENTATION. READ TABLE it_tadir INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. - lt_super = lcl_sap_package=>get( -devclass )->list_superpackages( ). + lt_super = zcl_abapgit_sap_package=>get( -devclass )->list_superpackages( ). LOOP AT it_tadir ASSIGNING . - lt_obj = lcl_sap_package=>get( -devclass )->list_superpackages( ). + lt_obj = zcl_abapgit_sap_package=>get( -devclass )->list_superpackages( ). * filter out possibilities from lt_super LOOP AT lt_super INTO lv_super. diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 752390ff4..7590333dd 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -112,7 +112,7 @@ CLASS ltcl_dangerous IMPLEMENTATION. LIKE LINE OF lt_types. - lcl_sap_package=>create_local( c_package ). + zcl_abapgit_sap_package=>create_local( c_package ). lt_types = lcl_objects=>supported_list( ). diff --git a/src/zcl_abapgit_sap_package.clas.abap b/src/zcl_abapgit_sap_package.clas.abap new file mode 100644 index 000000000..e086a43c7 --- /dev/null +++ b/src/zcl_abapgit_sap_package.clas.abap @@ -0,0 +1,260 @@ +CLASS zcl_abapgit_sap_package DEFINITION PUBLIC CREATE PUBLIC. + + PUBLIC SECTION. + CLASS-METHODS: + get + IMPORTING iv_package TYPE devclass + RETURNING VALUE(ri_package) TYPE REF TO zif_abapgit_sap_package, + create + IMPORTING is_package TYPE scompkdtln + RAISING zcx_abapgit_exception, + create_local + IMPORTING iv_package TYPE devclass + RAISING zcx_abapgit_exception. + + METHODS: + constructor + IMPORTING iv_package TYPE devclass. + + INTERFACES: zif_abapgit_sap_package. + + TYPES: BEGIN OF ty_injected, + package TYPE devclass, + object TYPE REF TO zif_abapgit_sap_package, + END OF ty_injected. + +* TODO, isolate this variable? + CLASS-DATA: gt_injected TYPE STANDARD TABLE OF ty_injected. + + PRIVATE SECTION. + DATA: mv_package TYPE devclass. + +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_SAP_PACKAGE IMPLEMENTATION. + + + METHOD constructor. + mv_package = iv_package. + ENDMETHOD. + + + METHOD create. + + DATA: lv_err TYPE string, + li_package TYPE REF TO if_package, + ls_package LIKE is_package. + + + ASSERT NOT is_package-devclass IS INITIAL. + + cl_package_factory=>load_package( + EXPORTING + i_package_name = is_package-devclass + EXCEPTIONS + object_not_existing = 1 + unexpected_error = 2 + intern_err = 3 + no_access = 4 + object_locked_and_modified = 5 ). + IF sy-subrc = 0. + " Package already exists. We assume this is fine. Its properties might be changed later at + " DEVC deserialization. + RETURN. + ENDIF. + + ls_package = is_package. + + " Set software component to 'HOME' if none is set at this point. + " Otherwise SOFTWARE_COMPONENT_INVALID will be raised. + IF ls_package-dlvunit IS INITIAL. + ls_package-dlvunit = 'HOME'. + ENDIF. + + cl_package_factory=>create_new_package( + EXPORTING + i_reuse_deleted_object = abap_true +* i_suppress_dialog = abap_true " does not exist in 730 + IMPORTING + e_package = li_package + CHANGING + c_package_data = ls_package + EXCEPTIONS + object_already_existing = 1 + object_just_created = 2 + not_authorized = 3 + wrong_name_prefix = 4 + undefined_name = 5 + reserved_local_name = 6 + invalid_package_name = 7 + short_text_missing = 8 + software_component_invalid = 9 + layer_invalid = 10 + author_not_existing = 11 + component_not_existing = 12 + component_missing = 13 + prefix_in_use = 14 + unexpected_error = 15 + intern_err = 16 + no_access = 17 +* invalid_translation_depth = 18 +* wrong_mainpack_value = 19 +* superpackage_invalid = 20 +* error_in_cts_checks = 21 + OTHERS = 18 ). + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( |Package { is_package-devclass } could not be created| ). + ENDIF. + + li_package->save( +* EXPORTING +* i_suppress_dialog = abap_true " Controls whether popups can be transmitted + EXCEPTIONS + object_invalid = 1 + object_not_changeable = 2 + cancelled_in_corr = 3 + permission_failure = 4 + unexpected_error = 5 + intern_err = 6 + OTHERS = 7 ). + 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_err. + zcx_abapgit_exception=>raise( lv_err ). + ENDIF. + + li_package->set_changeable( abap_false ). + + ENDMETHOD. + + + METHOD create_local. + + DATA: ls_package TYPE scompkdtln. + + + ls_package-devclass = iv_package. + ls_package-ctext = iv_package. + ls_package-parentcl = '$TMP'. + ls_package-dlvunit = 'LOCAL'. + ls_package-as4user = sy-uname. + + create( ls_package ). + + ENDMETHOD. "create + + + METHOD get. + + FIELD-SYMBOLS: LIKE LINE OF gt_injected. + + IF lines( gt_injected ) > 0. + READ TABLE gt_injected ASSIGNING WITH KEY package = iv_package. + ASSERT sy-subrc = 0. " unit test should be in control + ri_package = -object. + ELSE. + CREATE OBJECT ri_package TYPE zcl_abapgit_sap_package + EXPORTING + iv_package = iv_package. + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_sap_package~create_child. + + DATA: li_parent TYPE REF TO if_package, + ls_child TYPE scompkdtln. + + + cl_package_factory=>load_package( + EXPORTING + i_package_name = mv_package + IMPORTING + e_package = li_parent + EXCEPTIONS + object_not_existing = 1 + unexpected_error = 2 + intern_err = 3 + no_access = 4 + object_locked_and_modified = 5 ). + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error reading parent package' ). + ENDIF. + + ls_child-devclass = iv_child. + ls_child-dlvunit = li_parent->software_component. + ls_child-ctext = iv_child. + ls_child-parentcl = mv_package. + ls_child-pdevclass = li_parent->transport_layer. + ls_child-as4user = sy-uname. + + create( ls_child ). + + ENDMETHOD. + + + METHOD zif_abapgit_sap_package~exists. + + cl_package_factory=>load_package( + EXPORTING + i_package_name = mv_package + EXCEPTIONS + object_not_existing = 1 + unexpected_error = 2 + intern_err = 3 + no_access = 4 + object_locked_and_modified = 5 ). + rv_bool = boolc( sy-subrc <> 1 ). + + ENDMETHOD. + + + METHOD zif_abapgit_sap_package~list_subpackages. + + DATA: lt_list LIKE rt_list, + lv_devclass LIKE LINE OF rt_list. + + + SELECT devclass INTO TABLE rt_list + FROM tdevc WHERE parentcl = mv_package. "#EC CI_GENBUFF "#EC CI_SUBRC + +* note the recursion, since packages are added to the list + LOOP AT rt_list INTO lv_devclass. + lt_list = get( lv_devclass )->list_subpackages( ). + APPEND LINES OF lt_list TO rt_list. + ENDLOOP. + + ENDMETHOD. + + + METHOD zif_abapgit_sap_package~list_superpackages. + + DATA: lt_list LIKE rt_list, + lv_parent TYPE tdevc-parentcl. + + + APPEND mv_package TO rt_list. + + SELECT SINGLE parentcl INTO lv_parent + FROM tdevc WHERE devclass = mv_package. "#EC CI_GENBUFF + + IF sy-subrc = 0 AND NOT lv_parent IS INITIAL. + APPEND lv_parent TO rt_list. + lt_list = get( lv_parent )->list_superpackages( ). + APPEND LINES OF lt_list TO rt_list. + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_sap_package~read_parent. + + SELECT SINGLE parentcl FROM tdevc INTO rv_parentcl + WHERE devclass = mv_package. "#EC CI_SUBRC "#EC CI_GENBUFF + ASSERT sy-subrc = 0. + + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_abapgit_sap_package.clas.xml b/src/zcl_abapgit_sap_package.clas.xml new file mode 100644 index 000000000..d9240df1a --- /dev/null +++ b/src/zcl_abapgit_sap_package.clas.xml @@ -0,0 +1,18 @@ + + + + + + ZCL_ABAPGIT_SAP_PACKAGE + 1 + E + SAP package + 2 + 1 + X + X + X + + + + diff --git a/src/zif_abapgit_sap_package.intf.abap b/src/zif_abapgit_sap_package.intf.abap new file mode 100644 index 000000000..cdd667d35 --- /dev/null +++ b/src/zif_abapgit_sap_package.intf.abap @@ -0,0 +1,18 @@ +INTERFACE zif_abapgit_sap_package PUBLIC. + + TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY. + + METHODS: + list_subpackages + RETURNING VALUE(rt_list) TYPE ty_devclass_tt, + list_superpackages + RETURNING VALUE(rt_list) TYPE ty_devclass_tt, + read_parent + RETURNING VALUE(rv_parentcl) TYPE tdevc-parentcl, + create_child + IMPORTING iv_child TYPE devclass + RAISING zcx_abapgit_exception, + exists + RETURNING VALUE(rv_bool) TYPE abap_bool. + +ENDINTERFACE. diff --git a/src/zif_abapgit_sap_package.intf.xml b/src/zif_abapgit_sap_package.intf.xml new file mode 100644 index 000000000..38b2b857f --- /dev/null +++ b/src/zif_abapgit_sap_package.intf.xml @@ -0,0 +1,16 @@ + + + + + + ZIF_ABAPGIT_SAP_PACKAGE + 1 + E + SAP package + 2 + 1 + X + + + +