mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +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
|
@ -84,7 +84,10 @@ CLASS zcl_abapgit_objects_files DEFINITION
|
|||
!iv_extra TYPE clike OPTIONAL
|
||||
!iv_ext TYPE string
|
||||
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.
|
||||
|
||||
METHODS read_file
|
||||
|
@ -273,6 +276,11 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_file_pattern.
|
||||
rv_pattern = filename( iv_ext = '*' ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD read_abap.
|
||||
|
||||
DATA: lv_filename TYPE string,
|
||||
|
@ -381,6 +389,20 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
|
|||
|
||||
|
||||
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.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -8,14 +8,17 @@ CLASS ltcl_objects_files DEFINITION FOR TESTING
|
|||
|
||||
METHODS get_program_data
|
||||
IMPORTING
|
||||
iv_line_break TYPE clike
|
||||
RETURNING VALUE(rv_result) TYPE xstring.
|
||||
iv_line_break TYPE clike
|
||||
RETURNING
|
||||
VALUE(rv_result) TYPE xstring.
|
||||
|
||||
METHODS get_xml_data
|
||||
RETURNING VALUE(rv_result) TYPE xstring.
|
||||
RETURNING
|
||||
VALUE(rv_result) TYPE xstring.
|
||||
|
||||
METHODS get_expected_abap_source
|
||||
RETURNING VALUE(rt_result) TYPE abaptxt255_tab.
|
||||
RETURNING
|
||||
VALUE(rt_result) TYPE abaptxt255_tab.
|
||||
|
||||
METHODS read_abap FOR TESTING
|
||||
RAISING
|
||||
|
@ -25,13 +28,14 @@ CLASS ltcl_objects_files DEFINITION FOR TESTING
|
|||
RAISING
|
||||
cx_static_check.
|
||||
|
||||
METHODS get_file_pattern FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_objects_files IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
DATA: lt_files TYPE zif_abapgit_definitions=>ty_files_tt,
|
||||
ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
FIELD-SYMBOLS: <ls_files> LIKE LINE OF lt_files.
|
||||
|
||||
APPEND INITIAL LINE TO lt_files ASSIGNING <ls_files>.
|
||||
|
@ -96,15 +100,15 @@ CLASS ltcl_objects_files IMPLEMENTATION.
|
|||
|
||||
METHOD read_xml.
|
||||
DATA: BEGIN OF ls_exp_prog_metadata,
|
||||
name TYPE progname VALUE 'ZLF',
|
||||
subc(1) TYPE c VALUE '1',
|
||||
rload(1) TYPE c VALUE 'E',
|
||||
fixpt(1) TYPE c VALUE 'X',
|
||||
uccheck(1) TYPE c VALUE 'X',
|
||||
END OF ls_exp_prog_metadata,
|
||||
ls_act_prog_metadata LIKE ls_exp_prog_metadata,
|
||||
ls_exp_metadata TYPE zif_abapgit_definitions=>ty_metadata,
|
||||
li_xml TYPE REF TO zif_abapgit_xml_input.
|
||||
name TYPE progname VALUE 'ZLF',
|
||||
subc(1) TYPE c VALUE '1',
|
||||
rload(1) TYPE c VALUE 'E',
|
||||
fixpt(1) TYPE c VALUE 'X',
|
||||
uccheck(1) TYPE c VALUE 'X',
|
||||
END OF ls_exp_prog_metadata,
|
||||
ls_act_prog_metadata LIKE ls_exp_prog_metadata,
|
||||
ls_exp_metadata TYPE zif_abapgit_definitions=>ty_metadata,
|
||||
li_xml TYPE REF TO zif_abapgit_xml_input.
|
||||
|
||||
ls_exp_metadata-class = 'LCL_OBJECT_PROG'.
|
||||
ls_exp_metadata-version = 'v1.0.0'.
|
||||
|
@ -119,4 +123,12 @@ CLASS ltcl_objects_files IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_file_pattern.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 'zlf.prog.*'
|
||||
act = mo_cut->get_file_pattern( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
Loading…
Reference in New Issue
Block a user