mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +08:00
Reduce memory consumption during deserialize (#4357)
* Reduce memory consumption during deserialize Import of objects required unnecessarily a lot of memory. This was the especially the case during the initial import of repos with large (binary) objects or high number of objects (even if they were not under /src/). With this fix, an instance of an object serializer now contains only the files associated with this object (rather than all (!) files of the repo). * Change path logic * Comment Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
98ecc1a51c
commit
6dfa4eee17
|
@ -85,6 +85,9 @@ CLASS zcl_abapgit_objects_files DEFINITION
|
||||||
!iv_ext TYPE string
|
!iv_ext TYPE string
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_present) TYPE abap_bool .
|
VALUE(rv_present) TYPE abap_bool .
|
||||||
|
METHODS get_file_pattern
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_pattern) TYPE string .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
METHODS read_file
|
METHODS read_file
|
||||||
|
@ -273,6 +276,11 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_file_pattern.
|
||||||
|
rv_pattern = filename( iv_ext = '*' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD read_abap.
|
METHOD read_abap.
|
||||||
|
|
||||||
DATA: lv_filename TYPE string,
|
DATA: lv_filename TYPE string,
|
||||||
|
@ -381,6 +389,20 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD set_files.
|
METHOD set_files.
|
||||||
mt_files = it_files.
|
|
||||||
|
FIELD-SYMBOLS: <ls_file> LIKE LINE OF it_files.
|
||||||
|
|
||||||
|
CLEAR mt_files.
|
||||||
|
|
||||||
|
" Set only files matching the pattern for this object
|
||||||
|
" If a path has been defined in the constructor, then the path has to match, too
|
||||||
|
LOOP AT it_files ASSIGNING <ls_file> WHERE filename CP get_file_pattern( ).
|
||||||
|
IF mv_path IS INITIAL.
|
||||||
|
INSERT <ls_file> INTO TABLE mt_files.
|
||||||
|
ELSEIF mv_path = <ls_file>-path.
|
||||||
|
INSERT <ls_file> INTO TABLE mt_files.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -9,13 +9,16 @@ CLASS ltcl_objects_files DEFINITION FOR TESTING
|
||||||
METHODS get_program_data
|
METHODS get_program_data
|
||||||
IMPORTING
|
IMPORTING
|
||||||
iv_line_break TYPE clike
|
iv_line_break TYPE clike
|
||||||
RETURNING VALUE(rv_result) TYPE xstring.
|
RETURNING
|
||||||
|
VALUE(rv_result) TYPE xstring.
|
||||||
|
|
||||||
METHODS get_xml_data
|
METHODS get_xml_data
|
||||||
RETURNING VALUE(rv_result) TYPE xstring.
|
RETURNING
|
||||||
|
VALUE(rv_result) TYPE xstring.
|
||||||
|
|
||||||
METHODS get_expected_abap_source
|
METHODS get_expected_abap_source
|
||||||
RETURNING VALUE(rt_result) TYPE abaptxt255_tab.
|
RETURNING
|
||||||
|
VALUE(rt_result) TYPE abaptxt255_tab.
|
||||||
|
|
||||||
METHODS read_abap FOR TESTING
|
METHODS read_abap FOR TESTING
|
||||||
RAISING
|
RAISING
|
||||||
|
@ -25,6 +28,7 @@ CLASS ltcl_objects_files DEFINITION FOR TESTING
|
||||||
RAISING
|
RAISING
|
||||||
cx_static_check.
|
cx_static_check.
|
||||||
|
|
||||||
|
METHODS get_file_pattern FOR TESTING.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
CLASS ltcl_objects_files IMPLEMENTATION.
|
CLASS ltcl_objects_files IMPLEMENTATION.
|
||||||
|
@ -119,4 +123,12 @@ CLASS ltcl_objects_files IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_file_pattern.
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_equals(
|
||||||
|
exp = 'zlf.prog.*'
|
||||||
|
act = mo_cut->get_file_pattern( ) ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user