mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +08:00
* parallel: refactoring, #2121 * move cache handling outside of main loop * fix error found by abaplint
This commit is contained in:
parent
b96abd8eb4
commit
54e0155891
|
@ -19,14 +19,16 @@ CLASS zcl_abapgit_objects DEFINITION
|
||||||
BEGIN OF ty_serialization,
|
BEGIN OF ty_serialization,
|
||||||
files TYPE zif_abapgit_definitions=>ty_files_tt,
|
files TYPE zif_abapgit_definitions=>ty_files_tt,
|
||||||
item TYPE zif_abapgit_definitions=>ty_item,
|
item TYPE zif_abapgit_definitions=>ty_item,
|
||||||
END OF ty_serialization.
|
END OF ty_serialization .
|
||||||
|
|
||||||
CLASS-METHODS serialize
|
CLASS-METHODS serialize
|
||||||
IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item
|
IMPORTING
|
||||||
iv_language TYPE spras
|
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||||
io_log TYPE REF TO zcl_abapgit_log OPTIONAL
|
!iv_language TYPE spras
|
||||||
RETURNING VALUE(rs_files_and_item) TYPE zcl_abapgit_objects=>ty_serialization
|
RETURNING
|
||||||
RAISING zcx_abapgit_exception .
|
VALUE(rs_files_and_item) TYPE zcl_abapgit_objects=>ty_serialization
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
CLASS-METHODS deserialize
|
CLASS-METHODS deserialize
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||||
|
@ -84,9 +86,12 @@ CLASS zcl_abapgit_objects DEFINITION
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_types) TYPE ty_types_tt .
|
VALUE(rt_types) TYPE ty_types_tt .
|
||||||
CLASS-METHODS is_active
|
CLASS-METHODS is_active
|
||||||
IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item
|
IMPORTING
|
||||||
RETURNING VALUE(rv_active) TYPE abap_bool
|
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||||
RAISING zcx_abapgit_exception .
|
RETURNING
|
||||||
|
VALUE(rv_active) TYPE abap_bool
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
@ -226,6 +231,19 @@ ENDCLASS.
|
||||||
CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD adjust_namespaces.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_result> LIKE LINE OF rt_results.
|
||||||
|
|
||||||
|
rt_results = it_results.
|
||||||
|
|
||||||
|
LOOP AT rt_results ASSIGNING <ls_result>.
|
||||||
|
REPLACE ALL OCCURRENCES OF '#' IN <ls_result>-obj_name WITH '/'.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD changed_by.
|
METHOD changed_by.
|
||||||
|
|
||||||
DATA: li_obj TYPE REF TO zif_abapgit_object.
|
DATA: li_obj TYPE REF TO zif_abapgit_object.
|
||||||
|
@ -682,6 +700,23 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD filter_files_to_deserialize.
|
||||||
|
|
||||||
|
rt_results = it_results.
|
||||||
|
|
||||||
|
DELETE rt_results WHERE match = abap_true. " Full match
|
||||||
|
SORT rt_results
|
||||||
|
BY obj_type ASCENDING
|
||||||
|
obj_name ASCENDING
|
||||||
|
rstate DESCENDING. " ensures that non-empty rstate is kept
|
||||||
|
DELETE ADJACENT DUPLICATES FROM rt_results COMPARING obj_type obj_name.
|
||||||
|
|
||||||
|
DELETE rt_results WHERE obj_type IS INITIAL.
|
||||||
|
DELETE rt_results WHERE lstate = zif_abapgit_definitions=>c_state-added AND rstate IS INITIAL.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD has_changed_since.
|
METHOD has_changed_since.
|
||||||
rv_changed = abap_true. " Assume changed
|
rv_changed = abap_true. " Assume changed
|
||||||
|
|
||||||
|
@ -849,12 +884,9 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
rs_files_and_item-item = is_item.
|
rs_files_and_item-item = is_item.
|
||||||
|
|
||||||
IF is_supported( rs_files_and_item-item ) = abap_false.
|
IF is_supported( rs_files_and_item-item ) = abap_false.
|
||||||
IF NOT io_log IS INITIAL.
|
zcx_abapgit_exception=>raise( |Object type ignored, not supported: {
|
||||||
io_log->add( iv_msg = |Object type ignored, not supported: { rs_files_and_item-item-obj_type
|
rs_files_and_item-item-obj_type }-{
|
||||||
}-{ rs_files_and_item-item-obj_name }|
|
rs_files_and_item-item-obj_name }| ).
|
||||||
iv_type = 'E' ).
|
|
||||||
ENDIF.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
CREATE OBJECT lo_files
|
CREATE OBJECT lo_files
|
||||||
|
@ -1066,34 +1098,4 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
rt_overwrite = lt_overwrite_uniqe.
|
rt_overwrite = lt_overwrite_uniqe.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD filter_files_to_deserialize.
|
|
||||||
|
|
||||||
rt_results = it_results.
|
|
||||||
|
|
||||||
DELETE rt_results WHERE match = abap_true. " Full match
|
|
||||||
SORT rt_results
|
|
||||||
BY obj_type ASCENDING
|
|
||||||
obj_name ASCENDING
|
|
||||||
rstate DESCENDING. " ensures that non-empty rstate is kept
|
|
||||||
DELETE ADJACENT DUPLICATES FROM rt_results COMPARING obj_type obj_name.
|
|
||||||
|
|
||||||
DELETE rt_results WHERE obj_type IS INITIAL.
|
|
||||||
DELETE rt_results WHERE lstate = zif_abapgit_definitions=>c_state-added AND rstate IS INITIAL.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD adjust_namespaces.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF rt_results.
|
|
||||||
|
|
||||||
rt_results = it_results.
|
|
||||||
|
|
||||||
LOOP AT rt_results ASSIGNING <ls_result>.
|
|
||||||
REPLACE ALL OCCURRENCES OF '#' IN <ls_result>-obj_name WITH '/'.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -146,7 +146,7 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
|
|
||||||
TYPES:
|
TYPES:
|
||||||
ty_cache_tt TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_file_item
|
ty_cache_tt TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_file_item
|
||||||
WITH NON-UNIQUE KEY item .
|
WITH NON-UNIQUE KEY item .
|
||||||
|
|
||||||
METHODS apply_filter
|
METHODS apply_filter
|
||||||
IMPORTING
|
IMPORTING
|
||||||
|
@ -160,10 +160,11 @@ CLASS zcl_abapgit_repo DEFINITION
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS lookup_cache
|
METHODS lookup_cache
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!it_cache TYPE ty_cache_tt
|
!it_cache TYPE ty_cache_tt
|
||||||
!is_item TYPE zif_abapgit_definitions=>ty_item
|
EXPORTING
|
||||||
RETURNING
|
!et_found TYPE zif_abapgit_definitions=>ty_files_item_tt
|
||||||
VALUE(rt_found) TYPE zif_abapgit_definitions=>ty_files_item_tt
|
CHANGING
|
||||||
|
!ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
METHODS update_last_deserialize
|
METHODS update_last_deserialize
|
||||||
|
@ -346,6 +347,7 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
lo_progress TYPE REF TO zcl_abapgit_progress,
|
lo_progress TYPE REF TO zcl_abapgit_progress,
|
||||||
lt_cache TYPE ty_cache_tt,
|
lt_cache TYPE ty_cache_tt,
|
||||||
lt_found LIKE rt_files,
|
lt_found LIKE rt_files,
|
||||||
|
lx_error TYPE REF TO zcx_abapgit_exception,
|
||||||
ls_fils_item TYPE zcl_abapgit_objects=>ty_serialization.
|
ls_fils_item TYPE zcl_abapgit_objects=>ty_serialization.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_file> LIKE LINE OF ls_fils_item-files,
|
FIELD-SYMBOLS: <ls_file> LIKE LINE OF ls_fils_item-files,
|
||||||
|
@ -374,6 +376,12 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
apply_filter( EXPORTING it_filter = it_filter
|
apply_filter( EXPORTING it_filter = it_filter
|
||||||
CHANGING ct_tadir = lt_tadir ).
|
CHANGING ct_tadir = lt_tadir ).
|
||||||
|
|
||||||
|
lookup_cache(
|
||||||
|
EXPORTING it_cache = lt_cache
|
||||||
|
IMPORTING et_found = lt_found
|
||||||
|
CHANGING ct_tadir = lt_tadir ).
|
||||||
|
APPEND LINES OF lt_found TO rt_files.
|
||||||
|
|
||||||
CREATE OBJECT lo_progress
|
CREATE OBJECT lo_progress
|
||||||
EXPORTING
|
EXPORTING
|
||||||
iv_total = lines( lt_tadir ).
|
iv_total = lines( lt_tadir ).
|
||||||
|
@ -388,17 +396,13 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
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.
|
||||||
|
|
||||||
lt_found = lookup_cache( is_item = ls_fils_item-item
|
TRY.
|
||||||
it_cache = lt_cache ).
|
ls_fils_item = zcl_abapgit_objects=>serialize(
|
||||||
IF lines( lt_found ) > 0.
|
is_item = ls_fils_item-item
|
||||||
APPEND LINES OF lt_found TO rt_files.
|
iv_language = get_dot_abapgit( )->get_master_language( ) ).
|
||||||
CONTINUE.
|
CATCH zcx_abapgit_exception INTO lx_error.
|
||||||
ENDIF.
|
io_log->add_error( lx_error->get_text( ) ).
|
||||||
|
ENDTRY.
|
||||||
ls_fils_item = zcl_abapgit_objects=>serialize(
|
|
||||||
is_item = ls_fils_item-item
|
|
||||||
iv_language = get_dot_abapgit( )->get_master_language( )
|
|
||||||
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.
|
||||||
|
@ -461,22 +465,40 @@ CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lookup_cache.
|
METHOD lookup_cache.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_cache> LIKE LINE OF it_cache.
|
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item,
|
||||||
|
lv_index TYPE i.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_cache> LIKE LINE OF it_cache,
|
||||||
|
<ls_tadir> LIKE LINE OF ct_tadir.
|
||||||
|
|
||||||
|
CLEAR et_found.
|
||||||
|
|
||||||
|
IF mv_last_serialization IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT ct_tadir ASSIGNING <ls_tadir>.
|
||||||
|
lv_index = sy-tabix.
|
||||||
|
|
||||||
|
ls_item-obj_type = <ls_tadir>-object.
|
||||||
|
ls_item-obj_name = <ls_tadir>-obj_name.
|
||||||
|
ls_item-devclass = <ls_tadir>-devclass.
|
||||||
|
|
||||||
|
|
||||||
IF mv_last_serialization IS NOT INITIAL. " Try to fetch from cache
|
|
||||||
READ TABLE it_cache TRANSPORTING NO FIELDS
|
READ TABLE it_cache TRANSPORTING NO FIELDS
|
||||||
WITH KEY item = is_item. " type+name+package key
|
WITH KEY item = ls_item. " type+name+package key
|
||||||
" There is something in cache and the object is unchanged
|
" There is something in cache and the object is unchanged
|
||||||
IF sy-subrc = 0
|
IF sy-subrc = 0
|
||||||
AND abap_false = zcl_abapgit_objects=>has_changed_since(
|
AND abap_false = zcl_abapgit_objects=>has_changed_since(
|
||||||
is_item = is_item
|
is_item = ls_item
|
||||||
iv_timestamp = mv_last_serialization ).
|
iv_timestamp = mv_last_serialization ).
|
||||||
LOOP AT it_cache ASSIGNING <ls_cache> WHERE item = is_item.
|
LOOP AT it_cache ASSIGNING <ls_cache> WHERE item = ls_item.
|
||||||
APPEND <ls_cache> TO rt_found.
|
APPEND <ls_cache> TO et_found.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
DELETE ct_tadir INDEX lv_index.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user