Merge branch 'main' into mbtools/change_package_feature

This commit is contained in:
Marc Bernard 2025-03-20 11:01:56 +01:00 committed by GitHub
commit 6873c29a3e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 140 additions and 52 deletions

View File

@ -8,4 +8,4 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: REUSE Compliance Check - name: REUSE Compliance Check
uses: fsfe/reuse-action@v1 uses: fsfe/reuse-action@v5

View File

@ -23,14 +23,14 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"@abaplint/cli": "^2.113.82", "@abaplint/cli": "^2.113.105",
"@abaplint/database-sqlite": "^2.10.20", "@abaplint/database-sqlite": "^2.10.24",
"@abaplint/runtime": "^2.10.23", "@abaplint/runtime": "^2.10.26",
"express": "^4.21.2", "express": "^4.21.2",
"@abaplint/transpiler-cli": "^2.10.23", "@abaplint/transpiler-cli": "^2.10.26",
"globals": "^15.13.0", "globals": "^16.0.0",
"abapmerge": "^0.16.6", "abapmerge": "^0.16.6",
"c8": "^10.1.3", "c8": "^10.1.3",
"eslint": "^9.17.0" "eslint": "^9.22.0"
} }
} }

View File

@ -110,7 +110,7 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
<ls_local> LIKE LINE OF ls_files-local. <ls_local> LIKE LINE OF ls_files-local.
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ). ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( io_repo ).
LOOP AT ls_files-local ASSIGNING <ls_local>. LOOP AT ls_files-local ASSIGNING <ls_local>.
lv_changed_by = zcl_abapgit_objects=>changed_by( lv_changed_by = zcl_abapgit_objects=>changed_by(
@ -237,7 +237,7 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
DATA: ls_files TYPE zif_abapgit_definitions=>ty_stage_files. DATA: ls_files TYPE zif_abapgit_definitions=>ty_stage_files.
mi_log = ii_log. mi_log = ii_log.
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ). ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( io_repo ).
IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0. IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0.
ii_log->add_info( 'Nothing to stage' ). ii_log->add_info( 'Nothing to stage' ).

View File

@ -73,7 +73,7 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
<ls_remote> LIKE LINE OF ls_files-remote. <ls_remote> LIKE LINE OF ls_files-remote.
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ). ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( io_repo ).
ASSERT lines( ls_files-local ) > 0 ASSERT lines( ls_files-local ) > 0
OR lines( ls_files-remote ) > 0. OR lines( ls_files-remote ) > 0.
@ -142,7 +142,7 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
lv_email TYPE string. lv_email TYPE string.
mi_log = ii_log. mi_log = ii_log.
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ). ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( io_repo ).
IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0. IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0.
ii_log->add_info( 'Nothing to stage' ). ii_log->add_info( 'Nothing to stage' ).

View File

@ -50,7 +50,7 @@ CLASS zcl_abapgit_transport_2_branch IMPLEMENTATION.
CREATE OBJECT lo_stage. CREATE OBJECT lo_stage.
ls_stage_objects = zcl_abapgit_factory=>get_stage_logic( )->get( io_repository ). ls_stage_objects = zcl_abapgit_stage_logic=>get_stage_logic( )->get( io_repository ).
lt_object_statuses = zcl_abapgit_repo_status=>calculate( io_repository ). lt_object_statuses = zcl_abapgit_repo_status=>calculate( io_repository ).

View File

@ -848,6 +848,8 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
DATA lv_path_pattern TYPE string. DATA lv_path_pattern TYPE string.
CREATE OBJECT lo_section. CREATE OBJECT lo_section.
lo_section->mi_custom_mapping = mi_custom_mapping.
lv_normalized_path = lcl_utils=>normalize_path( iv_path ). lv_normalized_path = lcl_utils=>normalize_path( iv_path ).
lv_path_len = strlen( lv_normalized_path ). lv_path_len = strlen( lv_normalized_path ).
ls_path_parts = lcl_utils=>split_path( lv_normalized_path ). ls_path_parts = lcl_utils=>split_path( lv_normalized_path ).

View File

@ -72,7 +72,7 @@ CLASS lcl_paths_filter IMPLEMENTATION.
ENDIF. ENDIF.
LOOP AT it_skip_paths INTO lv_s. LOOP AT it_skip_paths INTO lv_s.
lv_s = to_lower( lv_s ). lv_s = condense( lv_s ).
APPEND lv_s TO lt_tab. APPEND lv_s TO lt_tab.
ENDLOOP. ENDLOOP.
@ -83,7 +83,7 @@ CLASS lcl_paths_filter IMPLEMENTATION.
DELETE lt_tab INDEX sy-tabix. DELETE lt_tab INDEX sy-tabix.
CONTINUE. CONTINUE.
ENDIF. ENDIF.
<s> = condense( to_lower( <s> ) ). <s> = condense( <s> ).
ENDLOOP. ENDLOOP.
ENDIF. ENDIF.

View File

@ -10,6 +10,7 @@ CLASS ltcl_filters_test DEFINITION FINAL
METHODS path_filter_w_patterns FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS path_filter_w_patterns FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS path_filter_deep FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS path_filter_deep FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS and_filter FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS and_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS mixed_case_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
ENDCLASS. ENDCLASS.
@ -227,4 +228,36 @@ CLASS ltcl_filters_test IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD mixed_case_filter.
DATA li_json TYPE REF TO zif_abapgit_ajson.
DATA li_json_filtered TYPE REF TO zif_abapgit_ajson.
li_json = zcl_abapgit_ajson=>create_empty( ).
li_json->set(
iv_path = '/a'
iv_val = '1' ).
li_json->set(
iv_path = '/bB'
iv_val = '2' ).
li_json->set(
iv_path = '/CC'
iv_val = '3' ).
li_json->set(
iv_path = '/cc'
iv_val = '4' ).
li_json->set(
iv_path = '/d'
iv_val = 5 ).
li_json_filtered = zcl_abapgit_ajson=>create_from(
ii_source_json = li_json
ii_filter = zcl_abapgit_ajson_filter_lib=>create_path_filter( iv_skip_paths = '/bB,/CC' ) ).
cl_abap_unit_assert=>assert_equals(
act = li_json_filtered->stringify( )
exp = '{"a":"1","cc":"4","d":5}' ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -358,6 +358,7 @@ CLASS ltcl_fields DEFINITION FINAL FOR TESTING
to_json_without_path FOR TESTING RAISING zcx_abapgit_ajson_error, to_json_without_path FOR TESTING RAISING zcx_abapgit_ajson_error,
to_json_with_path FOR TESTING RAISING zcx_abapgit_ajson_error, to_json_with_path FOR TESTING RAISING zcx_abapgit_ajson_error,
to_abap FOR TESTING RAISING zcx_abapgit_ajson_error, to_abap FOR TESTING RAISING zcx_abapgit_ajson_error,
to_abap_with_slice FOR TESTING RAISING zcx_abapgit_ajson_error,
to_json IMPORTING iv_path TYPE string RETURNING VALUE(rv_result) TYPE string RAISING zcx_abapgit_ajson_error. to_json IMPORTING iv_path TYPE string RETURNING VALUE(rv_result) TYPE string RAISING zcx_abapgit_ajson_error.
@ -403,6 +404,33 @@ CLASS ltcl_fields IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD to_abap_with_slice.
DATA: BEGIN OF ls_act,
y TYPE i,
END OF ls_act.
DATA lo_cut TYPE REF TO zif_abapgit_ajson.
DATA lt_mapping_fields TYPE zif_abapgit_ajson_mapping=>ty_mapping_fields.
DATA ls_mapping_field LIKE LINE OF lt_mapping_fields.
CLEAR ls_mapping_field.
ls_mapping_field-abap = 'Y'.
ls_mapping_field-json = 'c'.
INSERT ls_mapping_field INTO TABLE lt_mapping_fields.
lo_cut = zcl_abapgit_ajson=>parse( iv_json = '{"a":1,"b":{"c":2},"d":{"e":3}}'
ii_custom_mapping = zcl_abapgit_ajson_mapping=>create_field_mapping( lt_mapping_fields )
)->slice( `/b` ).
lo_cut->to_abap( IMPORTING ev_container = ls_act ).
cl_abap_unit_assert=>assert_equals(
act = ls_act-y
exp = 2 ).
ENDMETHOD.
METHOD to_json_without_path. METHOD to_json_without_path.

View File

@ -1,7 +1,7 @@
INTERFACE zif_abapgit_ajson INTERFACE zif_abapgit_ajson
PUBLIC. PUBLIC.
CONSTANTS version TYPE string VALUE 'v1.1.10'. "#EC NOTEXT CONSTANTS version TYPE string VALUE 'v1.1.11'. "#EC NOTEXT
CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT
CONSTANTS license TYPE string VALUE 'MIT'. "#EC NOTEXT CONSTANTS license TYPE string VALUE 'MIT'. "#EC NOTEXT

View File

@ -1,13 +1,24 @@
CLASS zcl_abapgit_stage_logic DEFINITION CLASS zcl_abapgit_stage_logic DEFINITION
PUBLIC PUBLIC
CREATE PRIVATE CREATE PRIVATE.
GLOBAL FRIENDS zcl_abapgit_factory .
PUBLIC SECTION. PUBLIC SECTION.
INTERFACES zif_abapgit_stage_logic. INTERFACES zif_abapgit_stage_logic.
CLASS-METHODS get_stage_logic
RETURNING
VALUE(ri_logic) TYPE REF TO zif_abapgit_stage_logic.
CLASS-METHODS set_stage_logic
IMPORTING
ii_logic TYPE REF TO zif_abapgit_stage_logic.
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
CLASS-DATA gi_stage_logic TYPE REF TO zif_abapgit_stage_logic.
CLASS-METHODS: CLASS-METHODS:
remove_ignored remove_ignored
IMPORTING io_repo TYPE REF TO zcl_abapgit_repo_online IMPORTING io_repo TYPE REF TO zcl_abapgit_repo_online
@ -22,6 +33,17 @@ ENDCLASS.
CLASS zcl_abapgit_stage_logic IMPLEMENTATION. CLASS zcl_abapgit_stage_logic IMPLEMENTATION.
METHOD get_stage_logic.
IF gi_stage_logic IS INITIAL.
CREATE OBJECT gi_stage_logic TYPE zcl_abapgit_stage_logic.
ENDIF.
ri_logic = gi_stage_logic.
ENDMETHOD.
METHOD remove_identical. METHOD remove_identical.
DATA: lv_index TYPE i, DATA: lv_index TYPE i,
@ -85,6 +107,11 @@ CLASS zcl_abapgit_stage_logic IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD set_stage_logic.
gi_stage_logic = ii_logic.
ENDMETHOD.
METHOD zif_abapgit_stage_logic~get. METHOD zif_abapgit_stage_logic~get.
" Getting REMOTE before LOCAL is critical to ensure that DATA config is loaded first " Getting REMOTE before LOCAL is critical to ensure that DATA config is loaded first

View File

@ -376,7 +376,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
METHOD init_files. METHOD init_files.
ms_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo = mo_repo ms_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( io_repo = mo_repo
ii_obj_filter = mi_obj_filter ). ii_obj_filter = mi_obj_filter ).
IF lines( ms_files-local ) = 0 AND lines( ms_files-remote ) = 0. IF lines( ms_files-local ) = 0 AND lines( ms_files-remote ) = 0.

View File

@ -284,6 +284,11 @@ CLASS ltcl_convert IMPLEMENTATION.
DATA lv_result TYPE string. DATA lv_result TYPE string.
" Test does not work on non-Unicode but is not important for real-world anyway
IF cl_abap_char_utilities=>charsize = 1.
RETURN.
ENDIF.
" 0xF8-0xFF are not valid in UTF-8 " 0xF8-0xFF are not valid in UTF-8
TRY. TRY.
lv_result = zcl_abapgit_convert=>xstring_to_string_utf8( 'F8FF00' ). lv_result = zcl_abapgit_convert=>xstring_to_string_utf8( 'F8FF00' ).

View File

@ -85,8 +85,11 @@ CLASS ltcl_xml_output IMPLEMENTATION.
lv_xstring = lo_conv_out_string->get_buffer( ). lv_xstring = lo_conv_out_string->get_buffer( ).
" Add BOM for Unicode systems
IF cl_abap_char_utilities=>charsize > 1.
lv_bom = cl_abap_char_utilities=>byte_order_mark_little. "UTF-16LE, 4103 lv_bom = cl_abap_char_utilities=>byte_order_mark_little. "UTF-16LE, 4103
CONCATENATE lv_bom lv_xstring INTO lv_xstring IN BYTE MODE. CONCATENATE lv_bom lv_xstring INTO lv_xstring IN BYTE MODE.
ENDIF.
lo_conv_in_string = cl_abap_conv_in_ce=>create( lo_conv_in_string = cl_abap_conv_in_ce=>create(
encoding = lv_encoding encoding = lv_encoding

View File

@ -30,7 +30,11 @@ CLASS ltcl_test IMPLEMENTATION.
DATA lv_result TYPE string. DATA lv_result TYPE string.
lv_result = mo_cut->print( '<foo></foo>' ). lv_result = mo_cut->print( '<foo></foo>' ).
" Skip BOM for Unicode systems
IF cl_abap_char_utilities=>charsize > 1.
lv_result = lv_result+1. lv_result = lv_result+1.
ENDIF.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -43,7 +47,11 @@ CLASS ltcl_test IMPLEMENTATION.
DATA lv_result TYPE string. DATA lv_result TYPE string.
lv_result = mo_cut->print( '<foo>2</foo>' ). lv_result = mo_cut->print( '<foo>2</foo>' ).
" Skip BOM for Unicode systems
IF cl_abap_char_utilities=>charsize > 1.
lv_result = lv_result+1. lv_result = lv_result+1.
ENDIF.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -56,7 +64,11 @@ CLASS ltcl_test IMPLEMENTATION.
DATA lv_result TYPE string. DATA lv_result TYPE string.
lv_result = mo_cut->print( '<foo><bar>2</bar></foo>' ). lv_result = mo_cut->print( '<foo><bar>2</bar></foo>' ).
" Skip BOM for Unicode systems
IF cl_abap_char_utilities=>charsize > 1.
lv_result = lv_result+1. lv_result = lv_result+1.
ENDIF.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result
@ -97,7 +109,10 @@ CLASS ltcl_test IMPLEMENTATION.
iv_xml = |<foo>\n <bar>2</bar>\n</foo>| iv_xml = |<foo>\n <bar>2</bar>\n</foo>|
iv_unpretty = abap_true ). iv_unpretty = abap_true ).
" Skip BOM for Unicode systems
IF cl_abap_char_utilities=>charsize > 1.
lv_result = lv_result+1. lv_result = lv_result+1.
ENDIF.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = lv_result act = lv_result

View File

@ -20,9 +20,6 @@ CLASS zcl_abapgit_factory DEFINITION
VALUE(ri_code_inspector) TYPE REF TO zif_abapgit_code_inspector VALUE(ri_code_inspector) TYPE REF TO zif_abapgit_code_inspector
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
CLASS-METHODS get_stage_logic
RETURNING
VALUE(ri_logic) TYPE REF TO zif_abapgit_stage_logic .
CLASS-METHODS get_cts_api CLASS-METHODS get_cts_api
RETURNING RETURNING
VALUE(ri_cts_api) TYPE REF TO zif_abapgit_cts_api . VALUE(ri_cts_api) TYPE REF TO zif_abapgit_cts_api .
@ -75,7 +72,6 @@ CLASS zcl_abapgit_factory DEFINITION
CLASS-DATA gi_tadir TYPE REF TO zif_abapgit_tadir . CLASS-DATA gi_tadir TYPE REF TO zif_abapgit_tadir .
CLASS-DATA gt_sap_package TYPE ty_sap_packages . CLASS-DATA gt_sap_package TYPE ty_sap_packages .
CLASS-DATA gt_code_inspector TYPE ty_code_inspector_packs . CLASS-DATA gt_code_inspector TYPE ty_code_inspector_packs .
CLASS-DATA gi_stage_logic TYPE REF TO zif_abapgit_stage_logic .
CLASS-DATA gi_cts_api TYPE REF TO zif_abapgit_cts_api . CLASS-DATA gi_cts_api TYPE REF TO zif_abapgit_cts_api .
CLASS-DATA gi_environment TYPE REF TO zif_abapgit_environment . CLASS-DATA gi_environment TYPE REF TO zif_abapgit_environment .
CLASS-DATA gi_longtext TYPE REF TO zif_abapgit_longtexts . CLASS-DATA gi_longtext TYPE REF TO zif_abapgit_longtexts .
@ -89,7 +85,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_FACTORY IMPLEMENTATION. CLASS zcl_abapgit_factory IMPLEMENTATION.
METHOD get_code_inspector. METHOD get_code_inspector.
@ -234,17 +230,6 @@ CLASS ZCL_ABAPGIT_FACTORY IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_stage_logic.
IF gi_stage_logic IS INITIAL.
CREATE OBJECT gi_stage_logic TYPE zcl_abapgit_stage_logic.
ENDIF.
ri_logic = gi_stage_logic.
ENDMETHOD.
METHOD get_tadir. METHOD get_tadir.
IF gi_tadir IS INITIAL. IF gi_tadir IS INITIAL.

View File

@ -16,9 +16,6 @@ CLASS zcl_abapgit_injector DEFINITION
IMPORTING IMPORTING
!iv_package TYPE devclass !iv_package TYPE devclass
!ii_code_inspector TYPE REF TO zif_abapgit_code_inspector . !ii_code_inspector TYPE REF TO zif_abapgit_code_inspector .
CLASS-METHODS set_stage_logic
IMPORTING
!ii_logic TYPE REF TO zif_abapgit_stage_logic .
CLASS-METHODS set_cts_api CLASS-METHODS set_cts_api
IMPORTING IMPORTING
!ii_cts_api TYPE REF TO zif_abapgit_cts_api . !ii_cts_api TYPE REF TO zif_abapgit_cts_api .
@ -146,13 +143,6 @@ CLASS zcl_abapgit_injector IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD set_stage_logic.
zcl_abapgit_factory=>gi_stage_logic = ii_logic.
ENDMETHOD.
METHOD set_tadir. METHOD set_tadir.
zcl_abapgit_factory=>gi_tadir = ii_tadir. zcl_abapgit_factory=>gi_tadir = ii_tadir.
ENDMETHOD. ENDMETHOD.