mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00
Parallel: refactoring, cleanup GET_FILES_LOCAL (#2119)
* refactor cache handling to new private method * refactor building dotabapgit file to separate meth * refactor filter logic to new method
This commit is contained in:
parent
b395132f3b
commit
bfbf44efa5
|
@ -24,15 +24,15 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_key) TYPE zif_abapgit_persistence=>ty_value .
|
VALUE(rv_key) TYPE zif_abapgit_persistence=>ty_value .
|
||||||
METHODS get_name
|
METHODS get_name
|
||||||
ABSTRACT
|
ABSTRACT
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_name) TYPE string
|
VALUE(rv_name) TYPE string
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS get_files_local
|
METHODS get_files_local
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!io_log TYPE REF TO zcl_abapgit_log OPTIONAL
|
!io_log TYPE REF TO zcl_abapgit_log OPTIONAL
|
||||||
!it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt OPTIONAL
|
!it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt OPTIONAL
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
|
VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
|
||||||
RAISING
|
RAISING
|
||||||
|
@ -107,12 +107,12 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS has_remote_source
|
METHODS has_remote_source
|
||||||
ABSTRACT
|
ABSTRACT
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_yes) TYPE abap_bool .
|
VALUE(rv_yes) TYPE abap_bool .
|
||||||
METHODS status
|
METHODS status
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!io_log TYPE REF TO zcl_abapgit_log OPTIONAL
|
!io_log TYPE REF TO zcl_abapgit_log OPTIONAL
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt
|
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt
|
||||||
RAISING
|
RAISING
|
||||||
|
@ -139,11 +139,33 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
iv_deserialized_at TYPE zif_abapgit_persistence=>ty_repo-deserialized_at OPTIONAL
|
iv_deserialized_at TYPE zif_abapgit_persistence=>ty_repo-deserialized_at OPTIONAL
|
||||||
iv_deserialized_by TYPE zif_abapgit_persistence=>ty_repo-deserialized_by OPTIONAL
|
iv_deserialized_by TYPE zif_abapgit_persistence=>ty_repo-deserialized_by OPTIONAL
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS reset_status .
|
METHODS reset_status .
|
||||||
METHODS reset_remote .
|
METHODS reset_remote .
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
TYPES:
|
||||||
|
ty_cache_tt TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_file_item
|
||||||
|
WITH NON-UNIQUE KEY item .
|
||||||
|
|
||||||
|
METHODS apply_filter
|
||||||
|
IMPORTING
|
||||||
|
!it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt
|
||||||
|
CHANGING
|
||||||
|
!ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt .
|
||||||
|
METHODS build_dotabapgit_file
|
||||||
|
RETURNING
|
||||||
|
VALUE(rs_file) TYPE zif_abapgit_definitions=>ty_file
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
METHODS lookup_cache
|
||||||
|
IMPORTING
|
||||||
|
!it_cache TYPE ty_cache_tt
|
||||||
|
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_found) TYPE zif_abapgit_definitions=>ty_files_item_tt
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
METHODS update_last_deserialize
|
METHODS update_last_deserialize
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
@ -154,6 +176,46 @@ ENDCLASS.
|
||||||
CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD apply_filter.
|
||||||
|
|
||||||
|
DATA: lt_filter TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_tadir
|
||||||
|
WITH NON-UNIQUE KEY object obj_name,
|
||||||
|
lv_index TYPE i.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir.
|
||||||
|
|
||||||
|
|
||||||
|
IF lines( it_filter ) = 0.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_filter = it_filter.
|
||||||
|
|
||||||
|
* this is another loop at TADIR, but typically the filter is blank
|
||||||
|
LOOP AT ct_tadir ASSIGNING <ls_tadir>.
|
||||||
|
lv_index = sy-tabix.
|
||||||
|
READ TABLE lt_filter TRANSPORTING NO FIELDS WITH KEY object = <ls_tadir>-object
|
||||||
|
obj_name = <ls_tadir>-obj_name
|
||||||
|
BINARY SEARCH.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
DELETE ct_tadir INDEX lv_index.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD build_dotabapgit_file.
|
||||||
|
|
||||||
|
rs_file-path = zif_abapgit_definitions=>c_root_dir.
|
||||||
|
rs_file-filename = zif_abapgit_definitions=>c_dot_abapgit.
|
||||||
|
rs_file-data = get_dot_abapgit( )->serialize( ).
|
||||||
|
rs_file-sha1 = zcl_abapgit_hash=>sha1( iv_type = zif_abapgit_definitions=>c_type-blob
|
||||||
|
iv_data = rs_file-data ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
|
|
||||||
ASSERT NOT is_data-key IS INITIAL.
|
ASSERT NOT is_data-key IS INITIAL.
|
||||||
|
@ -269,17 +331,12 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
|
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
|
||||||
lo_progress TYPE REF TO zcl_abapgit_progress,
|
lo_progress TYPE REF TO zcl_abapgit_progress,
|
||||||
lt_cache TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_file_item
|
lt_cache TYPE ty_cache_tt,
|
||||||
WITH NON-UNIQUE KEY item,
|
lt_found LIKE rt_files,
|
||||||
ls_fils_item TYPE zcl_abapgit_objects=>ty_serialization.
|
ls_fils_item TYPE zcl_abapgit_objects=>ty_serialization.
|
||||||
|
|
||||||
DATA: lt_filter TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_tadir
|
|
||||||
WITH NON-UNIQUE KEY object obj_name,
|
|
||||||
lv_filter_exist TYPE abap_bool.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_file> LIKE LINE OF ls_fils_item-files,
|
FIELD-SYMBOLS: <ls_file> LIKE LINE OF ls_fils_item-files,
|
||||||
<ls_return> LIKE LINE OF rt_files,
|
<ls_return> LIKE LINE OF rt_files,
|
||||||
<ls_cache> LIKE LINE OF lt_cache,
|
|
||||||
<ls_tadir> LIKE LINE OF lt_tadir.
|
<ls_tadir> LIKE LINE OF lt_tadir.
|
||||||
|
|
||||||
|
|
||||||
|
@ -290,13 +347,10 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
APPEND INITIAL LINE TO rt_files ASSIGNING <ls_return>.
|
APPEND INITIAL LINE TO rt_files ASSIGNING <ls_return>.
|
||||||
<ls_return>-file-path = zif_abapgit_definitions=>c_root_dir.
|
<ls_return>-file = build_dotabapgit_file( ).
|
||||||
<ls_return>-file-filename = zif_abapgit_definitions=>c_dot_abapgit.
|
|
||||||
<ls_return>-file-data = get_dot_abapgit( )->serialize( ).
|
|
||||||
<ls_return>-file-sha1 = zcl_abapgit_hash=>sha1( iv_type = zif_abapgit_definitions=>c_type-blob
|
|
||||||
iv_data = <ls_return>-file-data ).
|
|
||||||
|
|
||||||
lt_cache = mt_local.
|
lt_cache = mt_local.
|
||||||
|
|
||||||
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
|
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
|
||||||
iv_package = get_package( )
|
iv_package = get_package( )
|
||||||
iv_ignore_subpackages = get_local_settings( )-ignore_subpackages
|
iv_ignore_subpackages = get_local_settings( )-ignore_subpackages
|
||||||
|
@ -304,22 +358,14 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
io_dot = get_dot_abapgit( )
|
io_dot = get_dot_abapgit( )
|
||||||
io_log = io_log ).
|
io_log = io_log ).
|
||||||
|
|
||||||
lt_filter = it_filter.
|
apply_filter( EXPORTING it_filter = it_filter
|
||||||
lv_filter_exist = boolc( lines( lt_filter ) > 0 ).
|
CHANGING ct_tadir = lt_tadir ).
|
||||||
|
|
||||||
CREATE OBJECT lo_progress
|
CREATE OBJECT lo_progress
|
||||||
EXPORTING
|
EXPORTING
|
||||||
iv_total = lines( lt_tadir ).
|
iv_total = lines( lt_tadir ).
|
||||||
|
|
||||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||||
IF lv_filter_exist = abap_true.
|
|
||||||
READ TABLE lt_filter TRANSPORTING NO FIELDS WITH KEY object = <ls_tadir>-object
|
|
||||||
obj_name = <ls_tadir>-obj_name
|
|
||||||
BINARY SEARCH.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lo_progress->show(
|
lo_progress->show(
|
||||||
iv_current = sy-tabix
|
iv_current = sy-tabix
|
||||||
|
@ -328,20 +374,12 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
ls_fils_item-item-obj_type = <ls_tadir>-object.
|
ls_fils_item-item-obj_type = <ls_tadir>-object.
|
||||||
ls_fils_item-item-obj_name = <ls_tadir>-obj_name.
|
ls_fils_item-item-obj_name = <ls_tadir>-obj_name.
|
||||||
ls_fils_item-item-devclass = <ls_tadir>-devclass.
|
ls_fils_item-item-devclass = <ls_tadir>-devclass.
|
||||||
IF mv_last_serialization IS NOT INITIAL. " Try to fetch from cache
|
|
||||||
READ TABLE lt_cache TRANSPORTING NO FIELDS
|
|
||||||
WITH KEY item = ls_fils_item-item. " type+name+package key
|
|
||||||
" There is something in cache and the object is unchanged
|
|
||||||
IF sy-subrc = 0
|
|
||||||
AND abap_false = zcl_abapgit_objects=>has_changed_since(
|
|
||||||
is_item = ls_fils_item-item
|
|
||||||
iv_timestamp = mv_last_serialization ).
|
|
||||||
LOOP AT lt_cache ASSIGNING <ls_cache> WHERE item = ls_fils_item-item.
|
|
||||||
APPEND <ls_cache> TO rt_files.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
CONTINUE.
|
lt_found = lookup_cache( is_item = ls_fils_item-item
|
||||||
ENDIF.
|
it_cache = lt_cache ).
|
||||||
|
IF lines( lt_found ) > 0.
|
||||||
|
APPEND LINES OF lt_found TO rt_files.
|
||||||
|
CONTINUE.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ls_fils_item = zcl_abapgit_objects=>serialize(
|
ls_fils_item = zcl_abapgit_objects=>serialize(
|
||||||
|
@ -349,7 +387,6 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
iv_language = get_dot_abapgit( )->get_master_language( )
|
iv_language = get_dot_abapgit( )->get_master_language( )
|
||||||
io_log = io_log ).
|
io_log = io_log ).
|
||||||
|
|
||||||
|
|
||||||
LOOP AT ls_fils_item-files ASSIGNING <ls_file>.
|
LOOP AT ls_fils_item-files ASSIGNING <ls_file>.
|
||||||
<ls_file>-path = <ls_tadir>-path.
|
<ls_file>-path = <ls_tadir>-path.
|
||||||
|
|
||||||
|
@ -409,17 +446,39 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD lookup_cache.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_cache> LIKE LINE OF it_cache.
|
||||||
|
|
||||||
|
|
||||||
|
IF mv_last_serialization IS NOT INITIAL. " Try to fetch from cache
|
||||||
|
READ TABLE it_cache TRANSPORTING NO FIELDS
|
||||||
|
WITH KEY item = is_item. " type+name+package key
|
||||||
|
" There is something in cache and the object is unchanged
|
||||||
|
IF sy-subrc = 0
|
||||||
|
AND abap_false = zcl_abapgit_objects=>has_changed_since(
|
||||||
|
is_item = is_item
|
||||||
|
iv_timestamp = mv_last_serialization ).
|
||||||
|
LOOP AT it_cache ASSIGNING <ls_cache> WHERE item = is_item.
|
||||||
|
APPEND <ls_cache> TO rt_found.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD rebuild_local_checksums.
|
METHOD rebuild_local_checksums.
|
||||||
|
|
||||||
DATA:
|
DATA:
|
||||||
lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt,
|
lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt,
|
||||||
ls_last_item TYPE zif_abapgit_definitions=>ty_item,
|
ls_last_item TYPE zif_abapgit_definitions=>ty_item,
|
||||||
lt_checksums TYPE zif_abapgit_persistence=>ty_local_checksum_tt.
|
lt_checksums TYPE zif_abapgit_persistence=>ty_local_checksum_tt.
|
||||||
|
|
||||||
FIELD-SYMBOLS:
|
FIELD-SYMBOLS:
|
||||||
<ls_checksum> LIKE LINE OF lt_checksums,
|
<ls_checksum> LIKE LINE OF lt_checksums,
|
||||||
<ls_file_sig> LIKE LINE OF <ls_checksum>-files,
|
<ls_file_sig> LIKE LINE OF <ls_checksum>-files,
|
||||||
<ls_local> LIKE LINE OF lt_local.
|
<ls_local> LIKE LINE OF lt_local.
|
||||||
|
|
||||||
lt_local = get_files_local( ).
|
lt_local = get_files_local( ).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user