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.