Replace RS_NAME_SPLIT_NAMESPACE in TADIR class (#6443)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
This commit is contained in:
Frank Müller 2023-08-30 17:01:18 +02:00 committed by GitHub
parent 722be0c503
commit b80995467b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 173 additions and 19 deletions

View File

@ -106,32 +106,27 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
METHOD add_namespace.
DATA:
lv_name TYPE progname,
lv_namespace TYPE namespace.
DATA ls_tadir TYPE zif_abapgit_definitions=>ty_tadir.
DATA ls_obj_with_namespace TYPE zif_abapgit_definitions=>ty_obj_namespace.
FIELD-SYMBOLS <ls_tadir> LIKE LINE OF ct_tadir.
lv_name = iv_object.
TRY.
ls_obj_with_namespace = zcl_abapgit_factory=>get_sap_namespace( )->split_by_name( iv_object ).
CATCH zcx_abapgit_exception.
"Ignore the exception like before the replacement of the FM RS_NAME_SPLIT_NAMESPACE
RETURN.
ENDTRY.
CALL FUNCTION 'RS_NAME_SPLIT_NAMESPACE'
EXPORTING
name_with_namespace = lv_name
IMPORTING
namespace = lv_namespace
EXCEPTIONS
delimiter_error = 1
OTHERS = 2.
IF sy-subrc = 0 AND lv_namespace IS NOT INITIAL.
IF ls_obj_with_namespace-namespace IS NOT INITIAL.
READ TABLE ct_tadir TRANSPORTING NO FIELDS
WITH KEY pgmid = 'R3TR' object = 'NSPC' obj_name = lv_namespace.
WITH KEY pgmid = 'R3TR' object = 'NSPC' obj_name = ls_obj_with_namespace-namespace.
IF sy-subrc <> 0.
APPEND INITIAL LINE TO ct_tadir ASSIGNING <ls_tadir>.
<ls_tadir>-pgmid = 'R3TR'.
<ls_tadir>-object = 'NSPC'.
<ls_tadir>-obj_name = lv_namespace.
<ls_tadir>-obj_name = ls_obj_with_namespace-namespace.
<ls_tadir>-devclass = iv_package.
<ls_tadir>-srcsystem = sy-sysid.
<ls_tadir>-masterlang = sy-langu.

View File

@ -11,7 +11,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_SAP_NAMESPACE IMPLEMENTATION.
CLASS zcl_abapgit_sap_namespace IMPLEMENTATION.
METHOD zif_abapgit_sap_namespace~exists.
@ -26,4 +26,37 @@ CLASS ZCL_ABAPGIT_SAP_NAMESPACE IMPLEMENTATION.
SELECT SINGLE editflag FROM trnspace INTO lv_editflag WHERE namespace = iv_namespace.
rv_yes = boolc( sy-subrc = 0 AND lv_editflag = 'X' ).
ENDMETHOD.
METHOD zif_abapgit_sap_namespace~split_by_name.
* use this method instead of function module RS_NAME_SPLIT_NAMESPACE
DATA lv_regex TYPE string.
DATA lv_object TYPE string.
DATA lv_length TYPE i.
DATA lr_ex TYPE REF TO cx_root.
lv_regex = '^\/[^\/]{1,8}\/'.
TRY.
FIND REGEX lv_regex IN iv_obj_with_namespace MATCH LENGTH lv_length.
CATCH cx_root INTO lr_ex.
zcx_abapgit_exception=>raise( lr_ex->get_text( ) ).
ENDTRY.
IF sy-subrc = 0 AND lv_length > 1.
rs_obj_namespace-namespace = iv_obj_with_namespace(lv_length).
rs_obj_namespace-obj_without_namespace = iv_obj_with_namespace+lv_length.
ELSE.
IF iv_obj_with_namespace(1) = '/'.
zcx_abapgit_exception=>raise( |The object { iv_obj_with_namespace } has an invalid namespace| ).
ENDIF.
rs_obj_namespace-obj_without_namespace = iv_obj_with_namespace.
ENDIF.
IF iv_allow_slash_in_name = abap_false AND rs_obj_namespace-obj_without_namespace CA '/'.
zcx_abapgit_exception=>raise(
|Object without namespace { rs_obj_namespace-obj_without_namespace } contains a '/'| ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,108 @@
CLASS ltcl_check_split_by_name DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
PRIVATE SECTION.
METHODS check_with_namespace FOR TESTING RAISING zcx_abapgit_exception.
METHODS check_without_namespace FOR TESTING RAISING zcx_abapgit_exception.
METHODS check_exc_starts_with_slash FOR TESTING RAISING zcx_abapgit_exception.
METHODS check_exc_slash_in_name_w_ns FOR TESTING RAISING zcx_abapgit_exception.
METHODS check_exc_slash_in_name_wo_ns FOR TESTING RAISING zcx_abapgit_exception.
ENDCLASS.
CLASS ltcl_check_split_by_name IMPLEMENTATION.
METHOD check_with_namespace.
DATA lv_obj_with_namespace TYPE tadir-obj_name.
DATA ls_obj_with_namespace TYPE zif_abapgit_definitions=>ty_obj_namespace.
DATA lr_ex TYPE REF TO zcx_abapgit_exception.
lv_obj_with_namespace = '/BLA12345/TEST/123'.
TRY.
ls_obj_with_namespace = zcl_abapgit_factory=>get_sap_namespace( )->split_by_name( lv_obj_with_namespace ).
CATCH zcx_abapgit_exception INTO lr_ex.
cl_abap_unit_assert=>fail( lr_ex->get_text( ) ).
ENDTRY.
cl_abap_unit_assert=>assert_equals(
act = ls_obj_with_namespace-namespace
exp = '/BLA12345/' ).
cl_abap_unit_assert=>assert_equals(
act = ls_obj_with_namespace-obj_without_namespace
exp = 'TEST/123' ).
ENDMETHOD.
METHOD check_without_namespace.
DATA lv_obj_with_namespace TYPE tadir-obj_name.
DATA ls_obj_with_namespace TYPE zif_abapgit_definitions=>ty_obj_namespace.
DATA lr_ex TYPE REF TO zcx_abapgit_exception.
lv_obj_with_namespace = 'ZCL_ABAPGIT_SAP_NAMESP'.
TRY.
ls_obj_with_namespace = zcl_abapgit_factory=>get_sap_namespace( )->split_by_name( lv_obj_with_namespace ).
CATCH zcx_abapgit_exception INTO lr_ex.
cl_abap_unit_assert=>fail( lr_ex->get_text( ) ).
ENDTRY.
cl_abap_unit_assert=>assert_equals(
act = ls_obj_with_namespace-namespace
exp = '' ).
cl_abap_unit_assert=>assert_equals(
act = ls_obj_with_namespace-obj_without_namespace
exp = 'ZCL_ABAPGIT_SAP_NAMESP' ).
ENDMETHOD.
METHOD check_exc_starts_with_slash.
DATA lv_obj_with_namespace TYPE tadir-obj_name.
lv_obj_with_namespace = '/TEST12345/BLA'.
TRY.
zcl_abapgit_factory=>get_sap_namespace( )->split_by_name( lv_obj_with_namespace ).
CATCH zcx_abapgit_exception.
RETURN.
ENDTRY.
cl_abap_unit_assert=>fail( 'No Exception raised' ).
ENDMETHOD.
METHOD check_exc_slash_in_name_w_ns.
DATA lv_obj_with_namespace TYPE tadir-obj_name.
lv_obj_with_namespace = '/TEST/TEST/TEST'.
TRY.
zcl_abapgit_factory=>get_sap_namespace( )->split_by_name(
iv_obj_with_namespace = lv_obj_with_namespace
iv_allow_slash_in_name = abap_false ).
CATCH zcx_abapgit_exception.
RETURN.
ENDTRY.
cl_abap_unit_assert=>fail( 'No Exception raised' ).
ENDMETHOD.
METHOD check_exc_slash_in_name_wo_ns.
DATA lv_obj_with_namespace TYPE tadir-obj_name.
lv_obj_with_namespace = 'TEST/TEST'.
TRY.
zcl_abapgit_factory=>get_sap_namespace( )->split_by_name(
iv_obj_with_namespace = lv_obj_with_namespace
iv_allow_slash_in_name = abap_false ).
CATCH zcx_abapgit_exception.
RETURN.
ENDTRY.
cl_abap_unit_assert=>fail( 'No Exception raised' ).
ENDMETHOD.
ENDCLASS.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>

View File

@ -3,14 +3,23 @@ INTERFACE zif_abapgit_sap_namespace
METHODS exists
IMPORTING
iv_namespace TYPE trnspace-namespace
iv_namespace TYPE trnspace-namespace
RETURNING
VALUE(rv_yes) TYPE abap_bool.
METHODS is_editable
IMPORTING
iv_namespace TYPE trnspace-namespace
iv_namespace TYPE trnspace-namespace
RETURNING
VALUE(rv_yes) TYPE abap_bool.
METHODS split_by_name
IMPORTING
iv_obj_with_namespace TYPE tadir-obj_name
iv_allow_slash_in_name TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(rs_obj_namespace) TYPE zif_abapgit_definitions=>ty_obj_namespace
RAISING
zcx_abapgit_exception.
ENDINTERFACE.

View File

@ -128,6 +128,9 @@ CLASS ltcl_run_checks IMPLEMENTATION.
METHOD zif_abapgit_sap_namespace~is_editable.
ENDMETHOD.
METHOD zif_abapgit_sap_namespace~split_by_name.
ENDMETHOD.
METHOD append_result.
DATA ls_result LIKE LINE OF mt_results.

View File

@ -9,6 +9,11 @@ INTERFACE zif_abapgit_definitions
obj_name TYPE tadir-obj_name,
devclass TYPE devclass,
END OF ty_item_signature .
TYPES:
BEGIN OF ty_obj_namespace,
namespace TYPE trnspace-namespace,
obj_without_namespace TYPE tadir-obj_name,
END OF ty_obj_namespace.
TYPES:
BEGIN OF ty_item.
INCLUDE TYPE ty_item_signature.