Merge branch 'main' into mbtools/ut_non_unicode

This commit is contained in:
Marc Bernard 2025-03-10 20:02:55 +01:00 committed by GitHub
commit e80db4b2fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 114 additions and 84 deletions

View File

@ -3,8 +3,7 @@
[![License](https://img.shields.io/github/license/abapGit/abapGit?label=License&color=green)](LICENSE)
[![REUSE Status](https://api.reuse.software/badge/github.com/abapGit/abapGit?color=success)](https://api.reuse.software/info/github.com/abapGit/abapGit)
[![Slack](https://img.shields.io/badge/Join-Slack-blue)](https://communityinviter.com/apps/abapgit/abap)
[![abap package version](https://img.shields.io/endpoint?url=https://shield.abap.space/version-shield-json/github/abapGit/abapGit/src/zif_abapgit_version.intf.abap/c_abap_version&label=version)](https://github.com/abapGit/abapGit/blob/main/src/zif_abapgit_version.intf.abap)
[![abap package version](https://img.shields.io/endpoint?url=https://shield.abappm.com/github/abapGit/abapGit/-main/src/zif_abapgit_version.intf.abap/c_abap_version&label=version)](https://github.com/abapGit/abapGit/blob/main/src/zif_abapgit_version.intf.abap)
<!--
<picture>

View File

@ -34,6 +34,11 @@ CLASS zcl_abapgit_object_http DEFINITION
object_state TYPE c LENGTH 1,
END OF ty_gs_object_version.
TYPES: BEGIN OF ty_icf_node,
icfname TYPE c LENGTH 15,
icfparguid TYPE c LENGTH 25,
END OF ty_icf_node.
ENDCLASS.
@ -84,8 +89,7 @@ CLASS zcl_abapgit_object_http IMPLEMENTATION.
lo_http TYPE REF TO object,
ls_abap_lang TYPE ty_gs_object_version,
lo_instance TYPE REF TO object,
lv_tadir_name TYPE tadir-obj_name,
lt_ret TYPE STANDARD TABLE OF bapiret2.
lv_icfnode TYPE ty_icf_node.
TRY.
io_xml->read(
@ -98,6 +102,14 @@ CLASS zcl_abapgit_object_http IMPLEMENTATION.
EXPORTING iv_name = 'HTTPHDL'
CHANGING cg_data = lt_handler ).
TRY.
"link to icf node (in releases older than 757, a http service requires a icf node to function)
io_xml->read(
EXPORTING iv_name = 'HTTPICFNODE'
CHANGING cg_data = lv_icfnode ).
CATCH cx_root.
ENDTRY.
SELECT SINGLE id FROM ('UCONHTTPSERVHEAD') INTO lv_id WHERE id = lv_http_servid AND version = 'A'.
IF sy-subrc = 0.
"update
@ -152,6 +164,9 @@ CLASS zcl_abapgit_object_http IMPLEMENTATION.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_DESCRIPTION')
EXPORTING
texts = ls_description.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_ICF_SERVICE')
EXPORTING
iv_icfservice = lv_icfnode.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SAVE')
EXPORTING
run_dark = abap_true
@ -159,16 +174,6 @@ CLASS zcl_abapgit_object_http IMPLEMENTATION.
korrnum = iv_transport.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~FREE').
lv_tadir_name = lv_http_servid.
CALL METHOD ('CL_AUTH_START_TOOLS')=>('SUSH_CREATE')
EXPORTING
iv_type = 'HTTP'
iv_name = lv_tadir_name
iv_silent = abap_true
iv_task = iv_transport
IMPORTING
et_log = lt_ret.
CATCH cx_root INTO lx_root.
zcx_abapgit_exception=>raise_with_text( lx_root ).
ENDTRY.
@ -241,6 +246,7 @@ CLASS zcl_abapgit_object_http IMPLEMENTATION.
lt_handler TYPE TABLE OF ty_uconservhttphandler,
ls_description TYPE ty_uconhttpservtext,
lx_root TYPE REF TO cx_root,
lv_icfnode TYPE ty_icf_node,
lv_name TYPE c LENGTH 30.
TRY.
@ -275,6 +281,15 @@ CLASS zcl_abapgit_object_http IMPLEMENTATION.
iv_name = 'HTTPHDL'
ig_data = lt_handler ).
TRY.
"link to icf node (in releases older than 757, a http service requires a icf node to function)
CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_ICF_SERVICE') IMPORTING ev_icfservice = lv_icfnode.
io_xml->add(
iv_name = 'HTTPICFNODE'
ig_data = lv_icfnode ).
CATCH cx_root.
ENDTRY.
CATCH cx_root INTO lx_root.
zcx_abapgit_exception=>raise_with_text( lx_root ).
ENDTRY.

View File

@ -282,7 +282,10 @@ CLASS zcl_abapgit_syntax_highlighter IMPLEMENTATION.
rv_line = iv_line.
IF mv_hidden_chars = abap_true.
" The order of these replacements matters to properly show CR, LF, and CRLF
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN rv_line WITH '&nbsp;&rarr;&nbsp;'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN rv_line WITH '&para;'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN rv_line WITH '&crarr;'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf(1) IN rv_line WITH '&para;'.
REPLACE ALL OCCURRENCES OF ` ` IN rv_line WITH '&middot;'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>form_feed IN rv_line

View File

@ -85,6 +85,24 @@ ENDCLASS.
CLASS zcl_abapgit_gui_event IMPLEMENTATION.
METHOD class_constructor.
CONSTANTS lc_nbsp TYPE xstring VALUE 'C2A0'. " &nbsp;
TRY.
gv_non_breaking_space = zcl_abapgit_convert=>xstring_to_string_utf8( lc_nbsp ).
CATCH zcx_abapgit_exception.
" Fallback for non-Unicode systems
IF cl_abap_char_utilities=>charsize < 2.
gv_non_breaking_space = |X'A0'|.
ELSE.
ASSERT 0 = 1.
ENDIF.
ENDTRY.
ENDMETHOD.
METHOD constructor.
" Edge Webview control returns upper case action but abapGit requires lower case (#4841)
@ -112,6 +130,17 @@ CLASS zcl_abapgit_gui_event IMPLEMENTATION.
ENDMETHOD.
METHOD field_keys_to_upper.
FIELD-SYMBOLS <ls_field> LIKE LINE OF ct_fields.
LOOP AT ct_fields ASSIGNING <ls_field>.
<ls_field>-name = to_upper( <ls_field>-name ).
ENDLOOP.
ENDMETHOD.
METHOD new.
CREATE OBJECT ro_instance
EXPORTING
@ -122,51 +151,6 @@ CLASS zcl_abapgit_gui_event IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_gui_event~form_data.
IF mo_form_data IS NOT BOUND.
mo_form_data = fields_to_map( parse_post_form_data( zif_abapgit_gui_event~mt_postdata ) ).
mo_form_data->freeze( ).
ENDIF.
ro_string_map = mo_form_data.
ENDMETHOD.
METHOD zif_abapgit_gui_event~query.
IF mo_query IS NOT BOUND.
mo_query = fields_to_map( parse_fields( zif_abapgit_gui_event~mv_getdata ) ).
mo_query->freeze( ).
ENDIF.
ro_string_map = mo_query.
ENDMETHOD.
METHOD parse_fields_upper_case_name.
rt_fields = parse_fields(
iv_string = iv_string
iv_upper_cased = abap_true ).
ENDMETHOD.
METHOD parse_post_form_data.
DATA lv_serialized_post_data TYPE string.
lv_serialized_post_data = translate_postdata( it_post_data ).
IF iv_upper_cased = abap_true.
rt_fields = parse_fields_upper_case_name( lv_serialized_post_data ).
ELSE.
rt_fields = parse_fields( lv_serialized_post_data ).
ENDIF.
ENDMETHOD.
METHOD parse_fields.
DATA:
@ -206,6 +190,29 @@ CLASS zcl_abapgit_gui_event IMPLEMENTATION.
ENDMETHOD.
METHOD parse_fields_upper_case_name.
rt_fields = parse_fields(
iv_string = iv_string
iv_upper_cased = abap_true ).
ENDMETHOD.
METHOD parse_post_form_data.
DATA lv_serialized_post_data TYPE string.
lv_serialized_post_data = translate_postdata( it_post_data ).
IF iv_upper_cased = abap_true.
rt_fields = parse_fields_upper_case_name( lv_serialized_post_data ).
ELSE.
rt_fields = parse_fields( lv_serialized_post_data ).
ENDIF.
ENDMETHOD.
METHOD translate_postdata.
DATA: lt_post_data TYPE zif_abapgit_html_viewer=>ty_post_data,
@ -233,17 +240,6 @@ CLASS zcl_abapgit_gui_event IMPLEMENTATION.
ENDMETHOD.
METHOD field_keys_to_upper.
FIELD-SYMBOLS <ls_field> LIKE LINE OF ct_fields.
LOOP AT ct_fields ASSIGNING <ls_field>.
<ls_field>-name = to_upper( <ls_field>-name ).
ENDLOOP.
ENDMETHOD.
METHOD unescape.
* do not use cl_http_utility as it does strange things with the encoding
@ -261,15 +257,24 @@ CLASS zcl_abapgit_gui_event IMPLEMENTATION.
ENDMETHOD.
METHOD class_constructor.
METHOD zif_abapgit_gui_event~form_data.
CONSTANTS lc_nbsp TYPE xstring VALUE 'C2A0'. " &nbsp;
IF mo_form_data IS NOT BOUND.
mo_form_data = fields_to_map( parse_post_form_data( zif_abapgit_gui_event~mt_postdata ) ).
mo_form_data->freeze( ).
ENDIF.
ro_string_map = mo_form_data.
TRY.
gv_non_breaking_space = zcl_abapgit_convert=>xstring_to_string_utf8( lc_nbsp ).
CATCH zcx_abapgit_exception.
ASSERT 0 = 1.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_gui_event~query.
IF mo_query IS NOT BOUND.
mo_query = fields_to_map( parse_fields( zif_abapgit_gui_event~mv_getdata ) ).
mo_query->freeze( ).
ENDIF.
ro_string_map = mo_query.
ENDMETHOD.
ENDCLASS.

View File

@ -137,7 +137,7 @@ ENDCLASS.
CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
METHOD check_selected.
@ -154,13 +154,16 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
" Check all added files if the exist in different paths (packages) without being removed
LOOP AT io_files->mt_entries ASSIGNING <ls_item> WHERE v = zif_abapgit_definitions=>c_method-add.
" Allow mixed case path, but check filename to lower case
zcl_abapgit_path=>split_file_location(
EXPORTING
iv_fullpath = to_lower( <ls_item>-k )
iv_fullpath = <ls_item>-k
IMPORTING
ev_path = ls_file-path
ev_filename = ls_file-filename ).
ls_file-filename = to_lower( ls_file-filename ).
" Skip packages since they all have identical filenames
IF ls_file-filename <> 'package.devc.xml'.
lv_pattern = '*/' && to_upper( ls_file-filename ).
@ -235,11 +238,11 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
CREATE OBJECT lo_component
EXPORTING
io_repo = io_repo
iv_seed = iv_seed
iv_sci_result = iv_sci_result
io_repo = io_repo
iv_seed = iv_seed
iv_sci_result = iv_sci_result
ii_force_refresh = ii_force_refresh
ii_obj_filter = ii_obj_filter.
ii_obj_filter = ii_obj_filter.
ri_page = zcl_abapgit_gui_page_hoc=>create(
iv_page_title = 'Stage'
@ -738,13 +741,16 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
"Ignore Files that we don't want to stage, so any errors don't stop the staging process
WHERE v <> zif_abapgit_definitions=>c_method-skip.
" Allow mixed case path, but check filename to lower case
zcl_abapgit_path=>split_file_location(
EXPORTING
iv_fullpath = to_lower( <ls_item>-k ) " filename is lower cased
iv_fullpath = <ls_item>-k
IMPORTING
ev_path = ls_file-path
ev_filename = ls_file-filename ).
ls_file-filename = to_lower( ls_file-filename ).
READ TABLE ms_files-status ASSIGNING <ls_status>
WITH TABLE KEY
path = ls_file-path

View File

@ -27,6 +27,8 @@ CLASS zcl_abapgit_path DEFINITION
IMPORTING iv_path TYPE string
RETURNING VALUE(rv_filename) TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.