diff --git a/src/objects/package.devc.xml b/src/objects/package.devc.xml
new file mode 100644
index 000000000..998f41902
--- /dev/null
+++ b/src/objects/package.devc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ Objects
+
+
+
+
diff --git a/src/objects/zcl_abapgit_objects_files.clas.abap b/src/objects/zcl_abapgit_objects_files.clas.abap
new file mode 100644
index 000000000..8b4122b9d
--- /dev/null
+++ b/src/objects/zcl_abapgit_objects_files.clas.abap
@@ -0,0 +1,342 @@
+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,
+ add_string
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ iv_ext TYPE string
+ iv_string TYPE string
+ RAISING zcx_abapgit_exception,
+ read_string
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ iv_ext TYPE string
+ RETURNING VALUE(rv_string) TYPE string
+ RAISING zcx_abapgit_exception,
+ add_xml
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ io_xml TYPE REF TO zcl_abapgit_xml_output
+ iv_normalize TYPE sap_bool DEFAULT abap_true
+ is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
+ RAISING zcx_abapgit_exception,
+* needed since type-check during dynamic call fails even if the object is compatible
+ add_xml_from_plugin
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ io_xml TYPE REF TO object
+ iv_normalize TYPE sap_bool DEFAULT abap_true
+ RAISING zcx_abapgit_exception ##called,
+ read_xml
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ RETURNING VALUE(ro_xml) TYPE REF TO zcl_abapgit_xml_input
+ RAISING zcx_abapgit_exception,
+ read_abap
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ iv_error TYPE sap_bool DEFAULT abap_true
+ RETURNING VALUE(rt_abap) TYPE abaptxt255_tab
+ RAISING zcx_abapgit_exception,
+ add_abap
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ it_abap TYPE STANDARD TABLE
+ RAISING zcx_abapgit_exception,
+ add
+ IMPORTING is_file TYPE zif_abapgit_definitions=>ty_file,
+ add_raw
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ iv_ext TYPE string
+ iv_data TYPE xstring
+ RAISING zcx_abapgit_exception,
+ read_raw
+ IMPORTING iv_extra TYPE clike OPTIONAL
+ iv_ext TYPE string
+ RETURNING VALUE(rv_data) TYPE xstring
+ RAISING zcx_abapgit_exception,
+ get_files
+ RETURNING VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_tt,
+ set_files
+ IMPORTING it_files TYPE zif_abapgit_definitions=>ty_files_tt,
+ get_accessed_files
+ RETURNING VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_file_signatures_tt.
+
+ 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. "add
+
+
+ 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=>gc_newline.
+* when editing files via eg. GitHub web interface it adds a newline at end of file
+ lv_source = lv_source && zif_abapgit_definitions=>gc_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. "abap_to_file
+
+
+ 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. "add_raw
+
+
+ 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. "add_string
+
+
+ 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 ''.
+ ASSERT sy-subrc = 0.
+
+ ls_file-data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_xml ).
+
+ APPEND ls_file TO mt_files.
+
+ ENDMETHOD. "do
+
+
+ METHOD add_xml_from_plugin.
+* this method wraps add_xml as in the plugin. This is necessary as the wrapped
+* xml-object in the plugin can only be typed to object.
+* ABAP does not perform implicit type casts (also if compatible) in signatures,
+* therefore this method's signature is typed ref to object
+ DATA lo_xml TYPE REF TO zcl_abapgit_xml_output.
+
+ lo_xml ?= io_xml.
+
+ me->add_xml(
+ iv_extra = iv_extra
+ io_xml = lo_xml
+ iv_normalize = iv_normalize ).
+
+ ENDMETHOD. "add_xml_from_plugin
+
+
+ METHOD constructor.
+ ms_item = is_item.
+ mv_path = iv_path.
+ ENDMETHOD. "constructor
+
+
+ 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 '.' iv_ext
+ INTO rv_filename. "#EC NOTEXT
+ ELSE.
+ CONCATENATE lv_obj_name '.' ms_item-obj_type '.' iv_extra '.' iv_ext
+ INTO rv_filename. "#EC NOTEXT
+ ENDIF.
+
+* handle namespaces
+ REPLACE ALL OCCURRENCES OF '/' IN rv_filename WITH '#'.
+ TRANSLATE rv_filename TO LOWER CASE.
+
+ ENDMETHOD. "filename
+
+
+ METHOD get_accessed_files.
+ rt_files = mt_accessed_files.
+ ENDMETHOD. " get_accessed_files.
+
+
+ METHOD get_files.
+ rt_files = mt_files.
+ ENDMETHOD. "get_files
+
+
+ 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=>gc_newline INTO TABLE rt_abap.
+
+ ENDMETHOD. "read_abap
+
+
+ METHOD read_file.
+
+ FIELD-SYMBOLS: LIKE LINE OF mt_files,
+ LIKE LINE OF mt_accessed_files.
+
+ CLEAR ev_data.
+
+ IF mv_path IS NOT INITIAL.
+ READ TABLE mt_files ASSIGNING WITH KEY path = mv_path
+ filename = iv_filename.
+ ELSE.
+ READ TABLE mt_files ASSIGNING 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 = -path filename = -filename.
+ IF sy-subrc > 0. " Not found ? -> Add
+ APPEND INITIAL LINE TO mt_accessed_files ASSIGNING .
+ MOVE-CORRESPONDING TO .
+ ENDIF.
+
+ ev_data = -data.
+
+ ENDMETHOD. " read_file.
+
+
+ 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. "read_raw
+
+
+ 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. "read_string
+
+
+ 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. "read_xml
+
+
+ METHOD set_files.
+ mt_files = it_files.
+ ENDMETHOD. "set_files
+ENDCLASS.
diff --git a/src/objects/zcl_abapgit_objects_files.clas.xml b/src/objects/zcl_abapgit_objects_files.clas.xml
new file mode 100644
index 000000000..77eb9e797
--- /dev/null
+++ b/src/objects/zcl_abapgit_objects_files.clas.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZCL_ABAPGIT_OBJECTS_FILES
+ 1
+ E
+ Files
+ 2
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap
index 93718b4f4..fb3b220f3 100644
--- a/src/zabapgit_object_enho.prog.abap
+++ b/src/zabapgit_object_enho.prog.abap
@@ -29,7 +29,7 @@ CLASS lcl_object_enho_wdyc DEFINITION.
METHODS: constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
- io_files TYPE REF TO lcl_objects_files.
+ io_files TYPE REF TO zcl_abapgit_objects_files.
INTERFACES: lif_object_enho.
PRIVATE SECTION.
@@ -140,7 +140,7 @@ CLASS lcl_object_enho_wdyn DEFINITION.
METHODS: constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
- io_files TYPE REF TO lcl_objects_files.
+ io_files TYPE REF TO zcl_abapgit_objects_files.
INTERFACES: lif_object_enho.
PRIVATE SECTION.
@@ -271,13 +271,13 @@ CLASS lcl_object_enho_clif DEFINITION.
cx_enh_root,
serialize
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
- io_files TYPE REF TO lcl_objects_files
+ io_files TYPE REF TO zcl_abapgit_objects_files
io_clif TYPE REF TO cl_enh_tool_clif
RAISING zcx_abapgit_exception.
PRIVATE SECTION.
CLASS-METHODS: serialize_includes
- IMPORTING io_files TYPE REF TO lcl_objects_files
+ IMPORTING io_files TYPE REF TO zcl_abapgit_objects_files
io_clif TYPE REF TO cl_enh_tool_clif
RAISING zcx_abapgit_exception.
@@ -431,7 +431,7 @@ CLASS lcl_object_enho_badi DEFINITION.
METHODS: constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
- io_files TYPE REF TO lcl_objects_files.
+ io_files TYPE REF TO zcl_abapgit_objects_files.
INTERFACES: lif_object_enho.
PRIVATE SECTION.
@@ -552,7 +552,7 @@ CLASS lcl_object_enho_hook DEFINITION.
METHODS: constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
- io_files TYPE REF TO lcl_objects_files.
+ io_files TYPE REF TO zcl_abapgit_objects_files.
INTERFACES: lif_object_enho.
@@ -565,7 +565,7 @@ CLASS lcl_object_enho_hook DEFINITION.
TYPES: ty_spaces_tt TYPE STANDARD TABLE OF ty_spaces WITH DEFAULT KEY.
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
- DATA: mo_files TYPE REF TO lcl_objects_files.
+ DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
METHODS hook_impl_deserialize
IMPORTING it_spaces TYPE ty_spaces_tt
@@ -760,12 +760,12 @@ CLASS lcl_object_enho_intf DEFINITION.
constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
- io_files TYPE REF TO lcl_objects_files.
+ io_files TYPE REF TO zcl_abapgit_objects_files.
INTERFACES: lif_object_enho.
PRIVATE SECTION.
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item,
- mo_files TYPE REF TO lcl_objects_files.
+ mo_files TYPE REF TO zcl_abapgit_objects_files.
ENDCLASS. "lcl_object_enho_interface DEFINITION
@@ -865,12 +865,12 @@ CLASS lcl_object_enho_class DEFINITION.
constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
- io_files TYPE REF TO lcl_objects_files.
+ io_files TYPE REF TO zcl_abapgit_objects_files.
INTERFACES: lif_object_enho.
PRIVATE SECTION.
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
- DATA: mo_files TYPE REF TO lcl_objects_files.
+ DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
ENDCLASS. "lcl_object_enho_class DEFINITION
@@ -1005,12 +1005,12 @@ CLASS lcl_object_enho_fugr DEFINITION.
METHODS: constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
- io_files TYPE REF TO lcl_objects_files.
+ io_files TYPE REF TO zcl_abapgit_objects_files.
INTERFACES: lif_object_enho.
PRIVATE SECTION.
DATA: ms_item TYPE zif_abapgit_definitions=>ty_item,
- mo_files TYPE REF TO lcl_objects_files.
+ mo_files TYPE REF TO zcl_abapgit_objects_files.
ENDCLASS. "lcl_object_enho_wdyconf DEFINITION
diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap
index ac84e7c50..f1e8f096a 100644
--- a/src/zabapgit_objects.prog.abap
+++ b/src/zabapgit_objects.prog.abap
@@ -157,91 +157,6 @@ CLASS lcl_objects_activation IMPLEMENTATION.
ENDCLASS. "lcl_objects_activation IMPLEMENTATION
-*----------------------------------------------------------------------*
-* CLASS lcl_objects_files DEFINITION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_objects_files DEFINITION.
-
- PUBLIC SECTION.
- METHODS:
- constructor
- IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item
- iv_path TYPE string OPTIONAL,
- add_string
- IMPORTING iv_extra TYPE clike OPTIONAL
- iv_ext TYPE string
- iv_string TYPE string
- RAISING zcx_abapgit_exception,
- read_string
- IMPORTING iv_extra TYPE clike OPTIONAL
- iv_ext TYPE string
- RETURNING VALUE(rv_string) TYPE string
- RAISING zcx_abapgit_exception,
- add_xml
- IMPORTING iv_extra TYPE clike OPTIONAL
- io_xml TYPE REF TO zcl_abapgit_xml_output
- iv_normalize TYPE sap_bool DEFAULT abap_true
- is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
- RAISING zcx_abapgit_exception,
-* needed since type-check during dynamic call fails even if the object is compatible
- add_xml_from_plugin
- IMPORTING iv_extra TYPE clike OPTIONAL
- io_xml TYPE REF TO object
- iv_normalize TYPE sap_bool DEFAULT abap_true
- RAISING zcx_abapgit_exception ##called,
- read_xml
- IMPORTING iv_extra TYPE clike OPTIONAL
- RETURNING VALUE(ro_xml) TYPE REF TO zcl_abapgit_xml_input
- RAISING zcx_abapgit_exception,
- read_abap
- IMPORTING iv_extra TYPE clike OPTIONAL
- iv_error TYPE sap_bool DEFAULT abap_true
- RETURNING VALUE(rt_abap) TYPE abaptxt255_tab
- RAISING zcx_abapgit_exception,
- add_abap
- IMPORTING iv_extra TYPE clike OPTIONAL
- it_abap TYPE STANDARD TABLE
- RAISING zcx_abapgit_exception,
- add
- IMPORTING is_file TYPE zif_abapgit_definitions=>ty_file,
- add_raw
- IMPORTING iv_extra TYPE clike OPTIONAL
- iv_ext TYPE string
- iv_data TYPE xstring
- RAISING zcx_abapgit_exception,
- read_raw
- IMPORTING iv_extra TYPE clike OPTIONAL
- iv_ext TYPE string
- RETURNING VALUE(rv_data) TYPE xstring
- RAISING zcx_abapgit_exception,
- get_files
- RETURNING VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_tt,
- set_files
- IMPORTING it_files TYPE zif_abapgit_definitions=>ty_files_tt,
- get_accessed_files
- RETURNING VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_file_signatures_tt.
-
- 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. "lcl_objects_files DEFINITION
-
INTERFACE lif_comparison_result.
METHODS:
show_confirmation_dialog,
@@ -304,259 +219,10 @@ INTERFACE lif_object.
RETURNING VALUE(ro_comparison_result) TYPE REF TO lif_comparison_result
RAISING zcx_abapgit_exception.
- DATA: mo_files TYPE REF TO lcl_objects_files.
+ DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
ENDINTERFACE. "lif_object DEFINITION
-*----------------------------------------------------------------------*
-* CLASS lcl_objects_files IMPLEMENTATION
-*----------------------------------------------------------------------*
-*
-*----------------------------------------------------------------------*
-CLASS lcl_objects_files IMPLEMENTATION.
-
- METHOD constructor.
- ms_item = is_item.
- mv_path = iv_path.
- ENDMETHOD. "constructor
-
- METHOD add.
- APPEND is_file TO mt_files.
- ENDMETHOD. "add
-
- METHOD get_files.
- rt_files = mt_files.
- ENDMETHOD. "get_files
-
- METHOD set_files.
- mt_files = it_files.
- ENDMETHOD. "set_files
-
- METHOD get_accessed_files.
- rt_files = mt_accessed_files.
- ENDMETHOD. " get_accessed_files.
-
- 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. "read_string
-
- 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=>gc_newline INTO TABLE rt_abap.
-
- ENDMETHOD. "read_abap
-
- 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=>gc_newline.
-* when editing files via eg. GitHub web interface it adds a newline at end of file
- lv_source = lv_source && zif_abapgit_definitions=>gc_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. "abap_to_file
-
- 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. "add_string
-
- 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 ''.
- ASSERT sy-subrc = 0.
-
- ls_file-data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_xml ).
-
- APPEND ls_file TO mt_files.
-
- ENDMETHOD. "do
-
- 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. "read_xml
-
- 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 '.' iv_ext
- INTO rv_filename. "#EC NOTEXT
- ELSE.
- CONCATENATE lv_obj_name '.' ms_item-obj_type '.' iv_extra '.' iv_ext
- INTO rv_filename. "#EC NOTEXT
- ENDIF.
-
-* handle namespaces
- REPLACE ALL OCCURRENCES OF '/' IN rv_filename WITH '#'.
- TRANSLATE rv_filename TO LOWER CASE.
-
- ENDMETHOD. "filename
-
- METHOD add_xml_from_plugin.
-* this method wraps add_xml as in the plugin. This is necessary as the wrapped
-* xml-object in the plugin can only be typed to object.
-* ABAP does not perform implicit type casts (also if compatible) in signatures,
-* therefore this method's signature is typed ref to object
- DATA lo_xml TYPE REF TO zcl_abapgit_xml_output.
-
- lo_xml ?= io_xml.
-
- me->add_xml(
- iv_extra = iv_extra
- io_xml = lo_xml
- iv_normalize = iv_normalize ).
-
- ENDMETHOD. "add_xml_from_plugin
-
- METHOD read_file.
-
- FIELD-SYMBOLS: LIKE LINE OF mt_files,
- LIKE LINE OF mt_accessed_files.
-
- CLEAR ev_data.
-
- IF mv_path IS NOT INITIAL.
- READ TABLE mt_files ASSIGNING WITH KEY path = mv_path
- filename = iv_filename.
- ELSE.
- READ TABLE mt_files ASSIGNING 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 = -path filename = -filename.
- IF sy-subrc > 0. " Not found ? -> Add
- APPEND INITIAL LINE TO mt_accessed_files ASSIGNING .
- MOVE-CORRESPONDING TO .
- ENDIF.
-
- ev_data = -data.
-
- ENDMETHOD. " read_file.
-
- 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. "add_raw
-
- 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. "read_raw
-
-ENDCLASS. "lcl_objects_files IMPLEMENTATION
-
*----------------------------------------------------------------------*
* CLASS lcl_objects_super DEFINITION
*----------------------------------------------------------------------*
@@ -847,7 +513,7 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super.
METHODS serialize_program
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output OPTIONAL
is_item TYPE zif_abapgit_definitions=>ty_item
- io_files TYPE REF TO lcl_objects_files
+ io_files TYPE REF TO zcl_abapgit_objects_files
iv_program TYPE programm OPTIONAL
iv_extra TYPE clike OPTIONAL
RAISING zcx_abapgit_exception.
diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap
index aea402e51..9d9173093 100644
--- a/src/zabapgit_objects_impl.prog.abap
+++ b/src/zabapgit_objects_impl.prog.abap
@@ -344,7 +344,7 @@ CLASS lcl_objects IMPLEMENTATION.
DATA: li_obj TYPE REF TO lif_object,
lo_xml TYPE REF TO zcl_abapgit_xml_output,
- lo_files TYPE REF TO lcl_objects_files.
+ lo_files TYPE REF TO zcl_abapgit_objects_files.
IF is_supported( is_item ) = abap_false.
@@ -429,7 +429,7 @@ CLASS lcl_objects IMPLEMENTATION.
li_obj TYPE REF TO lif_object,
lt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
lv_package TYPE devclass,
- lo_files TYPE REF TO lcl_objects_files,
+ lo_files TYPE REF TO zcl_abapgit_objects_files,
lo_xml TYPE REF TO zcl_abapgit_xml_input,
lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
lt_ddic TYPE TABLE OF ty_deserialization,
diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap
index 7884c63e6..c18886590 100644
--- a/src/zabapgit_unit_test_clas_intf.prog.abap
+++ b/src/zabapgit_unit_test_clas_intf.prog.abap
@@ -157,7 +157,8 @@ CLASS ltd_spy_oo_object IMPLEMENTATION.
ENDCLASS.
CLASS ltd_fake_object_files DEFINITION FOR TESTING
- INHERITING FROM lcl_objects_files.
+ INHERITING FROM zcl_abapgit_objects_files.
+
PUBLIC SECTION.
METHODS constructor.
METHODS add_abap REDEFINITION.