mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-03 05:18:59 +08:00

With this commit we fix the filename construction so that for objects without file extension the correct filename is constructed. Before this commit is applied these objects create file names with an additional dot at the end.
350 lines
9.0 KiB
ABAP
350 lines
9.0 KiB
ABAP
CLASS zcl_abapgit_objects_files DEFINITION
|
|
PUBLIC
|
|
CREATE PUBLIC .
|
|
|
|
PUBLIC SECTION.
|
|
|
|
METHODS constructor
|
|
IMPORTING
|
|
!is_item TYPE zif_abapgit_definitions=>ty_item
|
|
!iv_path TYPE string OPTIONAL .
|
|
METHODS add_string
|
|
IMPORTING
|
|
!iv_extra TYPE clike OPTIONAL
|
|
!iv_ext TYPE string
|
|
!iv_string TYPE string
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS read_string
|
|
IMPORTING
|
|
!iv_extra TYPE clike OPTIONAL
|
|
!iv_ext TYPE string
|
|
RETURNING
|
|
VALUE(rv_string) TYPE string
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS add_xml
|
|
IMPORTING
|
|
!iv_extra TYPE clike OPTIONAL
|
|
!io_xml TYPE REF TO zcl_abapgit_xml_output
|
|
!iv_normalize TYPE abap_bool DEFAULT abap_true
|
|
!is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS read_xml
|
|
IMPORTING
|
|
!iv_extra TYPE clike OPTIONAL
|
|
RETURNING
|
|
VALUE(ro_xml) TYPE REF TO zcl_abapgit_xml_input
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS read_abap
|
|
IMPORTING
|
|
!iv_extra TYPE clike OPTIONAL
|
|
!iv_error TYPE abap_bool DEFAULT abap_true
|
|
RETURNING
|
|
VALUE(rt_abap) TYPE abaptxt255_tab
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS add_abap
|
|
IMPORTING
|
|
!iv_extra TYPE clike OPTIONAL
|
|
!it_abap TYPE STANDARD TABLE
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS add
|
|
IMPORTING
|
|
!is_file TYPE zif_abapgit_definitions=>ty_file .
|
|
METHODS add_raw
|
|
IMPORTING
|
|
!iv_extra TYPE clike OPTIONAL
|
|
!iv_ext TYPE string
|
|
!iv_data TYPE xstring
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS read_raw
|
|
IMPORTING
|
|
!iv_extra TYPE clike OPTIONAL
|
|
!iv_ext TYPE string
|
|
RETURNING
|
|
VALUE(rv_data) TYPE xstring
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
METHODS get_files
|
|
RETURNING
|
|
VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_tt .
|
|
METHODS set_files
|
|
IMPORTING
|
|
!it_files TYPE zif_abapgit_definitions=>ty_files_tt .
|
|
METHODS get_accessed_files
|
|
RETURNING
|
|
VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_file_signatures_tt .
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item,
|
|
mt_accessed_files TYPE zif_abapgit_definitions=>ty_file_signatures_tt,
|
|
mt_files TYPE zif_abapgit_definitions=>ty_files_tt,
|
|
mv_path TYPE string.
|
|
|
|
METHODS:
|
|
read_file
|
|
IMPORTING iv_filename TYPE string
|
|
iv_error TYPE abap_bool DEFAULT abap_true
|
|
EXPORTING ev_data TYPE xstring
|
|
RAISING zcx_abapgit_exception,
|
|
filename
|
|
IMPORTING iv_extra TYPE clike OPTIONAL
|
|
iv_ext TYPE string
|
|
RETURNING VALUE(rv_filename) TYPE string.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_ABAPGIT_OBJECTS_FILES IMPLEMENTATION.
|
|
|
|
|
|
METHOD add.
|
|
APPEND is_file TO mt_files.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD add_abap.
|
|
|
|
DATA: lv_source TYPE string,
|
|
ls_file TYPE zif_abapgit_definitions=>ty_file.
|
|
|
|
|
|
CONCATENATE LINES OF it_abap INTO lv_source SEPARATED BY zif_abapgit_definitions=>c_newline.
|
|
* when editing files via eg. GitHub web interface it adds a newline at end of file
|
|
lv_source = lv_source && zif_abapgit_definitions=>c_newline.
|
|
|
|
ls_file-path = '/'.
|
|
ls_file-filename = filename( iv_extra = iv_extra
|
|
iv_ext = 'abap' ). "#EC NOTEXT
|
|
ls_file-data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_source ).
|
|
|
|
APPEND ls_file TO mt_files.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD add_raw.
|
|
|
|
DATA: ls_file TYPE zif_abapgit_definitions=>ty_file.
|
|
|
|
ls_file-path = '/'.
|
|
ls_file-data = iv_data.
|
|
ls_file-filename = filename( iv_extra = iv_extra
|
|
iv_ext = iv_ext ).
|
|
|
|
APPEND ls_file TO mt_files.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD add_string.
|
|
|
|
DATA: ls_file TYPE zif_abapgit_definitions=>ty_file.
|
|
|
|
|
|
ls_file-path = '/'.
|
|
ls_file-filename = filename( iv_extra = iv_extra
|
|
iv_ext = iv_ext ). "#EC NOTEXT
|
|
ls_file-data = zcl_abapgit_convert=>string_to_xstring_utf8( iv_string ).
|
|
|
|
APPEND ls_file TO mt_files.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD add_xml.
|
|
|
|
DATA: lv_xml TYPE string,
|
|
ls_file TYPE zif_abapgit_definitions=>ty_file.
|
|
|
|
|
|
lv_xml = io_xml->render( iv_normalize = iv_normalize
|
|
is_metadata = is_metadata ).
|
|
ls_file-path = '/'.
|
|
|
|
ls_file-filename = filename( iv_extra = iv_extra
|
|
iv_ext = 'xml' ). "#EC NOTEXT
|
|
|
|
REPLACE FIRST OCCURRENCE
|
|
OF REGEX '<\?xml version="1\.0" encoding="[\w-]+"\?>'
|
|
IN lv_xml
|
|
WITH '<?xml version="1.0" encoding="utf-8"?>'.
|
|
ASSERT sy-subrc = 0.
|
|
|
|
ls_file-data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_xml ).
|
|
|
|
APPEND ls_file TO mt_files.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD constructor.
|
|
ms_item = is_item.
|
|
mv_path = iv_path.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD filename.
|
|
|
|
DATA: lv_obj_name TYPE string.
|
|
|
|
|
|
lv_obj_name = ms_item-obj_name.
|
|
|
|
IF ms_item-obj_type = 'DEVC'.
|
|
" Packages have a fixed filename so that the repository can be installed to a different
|
|
" package(-hierarchy) on the client and not show up as a different package in the repo.
|
|
lv_obj_name = 'package'.
|
|
ENDIF.
|
|
|
|
IF iv_extra IS INITIAL.
|
|
CONCATENATE lv_obj_name '.' ms_item-obj_type
|
|
INTO rv_filename. "#EC NOTEXT
|
|
ELSE.
|
|
CONCATENATE lv_obj_name '.' ms_item-obj_type '.' iv_extra
|
|
INTO rv_filename. "#EC NOTEXT
|
|
ENDIF.
|
|
|
|
IF iv_ext IS NOT INITIAL.
|
|
CONCATENATE rv_filename '.' iv_ext
|
|
INTO rv_filename.
|
|
ENDIF.
|
|
|
|
* handle namespaces
|
|
REPLACE ALL OCCURRENCES OF '/' IN rv_filename WITH '#'.
|
|
TRANSLATE rv_filename TO LOWER CASE.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_accessed_files.
|
|
rt_files = mt_accessed_files.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_files.
|
|
rt_files = mt_files.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD read_abap.
|
|
|
|
DATA: lv_filename TYPE string,
|
|
lv_data TYPE xstring,
|
|
lv_abap TYPE string.
|
|
|
|
|
|
lv_filename = filename( iv_extra = iv_extra
|
|
iv_ext = 'abap' ). "#EC NOTEXT
|
|
|
|
read_file( EXPORTING iv_filename = lv_filename
|
|
iv_error = iv_error
|
|
IMPORTING ev_data = lv_data ).
|
|
|
|
IF lv_data IS INITIAL. " Post-handling of iv_error = false
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
lv_abap = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
|
|
|
|
SPLIT lv_abap AT zif_abapgit_definitions=>c_newline INTO TABLE rt_abap.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD read_file.
|
|
|
|
FIELD-SYMBOLS: <ls_file> LIKE LINE OF mt_files,
|
|
<ls_accessed> LIKE LINE OF mt_accessed_files.
|
|
|
|
CLEAR ev_data.
|
|
|
|
IF mv_path IS NOT INITIAL.
|
|
READ TABLE mt_files ASSIGNING <ls_file> WITH KEY path = mv_path
|
|
filename = iv_filename.
|
|
ELSE.
|
|
READ TABLE mt_files ASSIGNING <ls_file> WITH KEY filename = iv_filename.
|
|
ENDIF.
|
|
|
|
IF sy-subrc <> 0.
|
|
IF iv_error = abap_true.
|
|
zcx_abapgit_exception=>raise( |File not found: { iv_filename }| ).
|
|
ELSE.
|
|
RETURN.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
" Update access table
|
|
READ TABLE mt_accessed_files TRANSPORTING NO FIELDS
|
|
WITH KEY path = <ls_file>-path filename = <ls_file>-filename.
|
|
IF sy-subrc > 0. " Not found ? -> Add
|
|
APPEND INITIAL LINE TO mt_accessed_files ASSIGNING <ls_accessed>.
|
|
MOVE-CORRESPONDING <ls_file> TO <ls_accessed>.
|
|
ENDIF.
|
|
|
|
ev_data = <ls_file>-data.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD read_raw.
|
|
|
|
DATA: lv_filename TYPE string.
|
|
|
|
lv_filename = filename( iv_extra = iv_extra
|
|
iv_ext = iv_ext ).
|
|
|
|
read_file( EXPORTING iv_filename = lv_filename
|
|
IMPORTING ev_data = rv_data ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD read_string.
|
|
|
|
DATA: lv_filename TYPE string,
|
|
lv_data TYPE xstring.
|
|
|
|
lv_filename = filename( iv_extra = iv_extra
|
|
iv_ext = iv_ext ). "#EC NOTEXT
|
|
|
|
read_file( EXPORTING iv_filename = lv_filename
|
|
IMPORTING ev_data = lv_data ).
|
|
|
|
rv_string = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD read_xml.
|
|
|
|
DATA: lv_filename TYPE string,
|
|
lv_data TYPE xstring,
|
|
lv_xml TYPE string.
|
|
|
|
lv_filename = filename( iv_extra = iv_extra
|
|
iv_ext = 'xml' ). "#EC NOTEXT
|
|
|
|
read_file( EXPORTING iv_filename = lv_filename
|
|
IMPORTING ev_data = lv_data ).
|
|
|
|
lv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
|
|
|
|
CREATE OBJECT ro_xml
|
|
EXPORTING
|
|
iv_xml = lv_xml.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD set_files.
|
|
mt_files = it_files.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|