Diff calculation: improve performance (#4603)

* Diff calculation improve performance

* optimize table access

Co-authored-by: Christian Günter <Christian.Guenter@zuerich.ch>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Christian Günter 2021-03-07 12:25:10 +01:00 committed by GitHub
parent 72f08d64b1
commit d7e43fc0b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -195,11 +195,12 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
VALUE(ri_html) TYPE REF TO zif_abapgit_html VALUE(ri_html) TYPE REF TO zif_abapgit_html
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS filter_diff_by_files METHODS is_file_requested
IMPORTING IMPORTING
!it_files TYPE zif_abapgit_definitions=>ty_stage_tt it_files TYPE zif_abapgit_definitions=>ty_stage_tt
CHANGING is_status TYPE zif_abapgit_definitions=>ty_result
!ct_diff_files TYPE ty_file_diffs . RETURNING
VALUE(rv_is_file_requested) TYPE abap_bool.
ENDCLASS. ENDCLASS.
@ -459,19 +460,20 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
path ASCENDING path ASCENDING
filename ASCENDING. filename ASCENDING.
LOOP AT lt_status ASSIGNING <ls_status> WHERE match IS INITIAL. LOOP AT lt_status ASSIGNING <ls_status> WHERE match IS INITIAL.
append_diff( it_remote = lt_remote
it_local = lt_local IF is_file_requested( it_files = it_files
is_status = <ls_status> ). is_status = <ls_status> ) = abap_true.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
ENDIF.
ENDLOOP. ENDLOOP.
ENDIF. ENDIF.
filter_diff_by_files(
EXPORTING
it_files = it_files
CHANGING
ct_diff_files = mt_diff_files ).
ENDMETHOD. ENDMETHOD.
@ -504,28 +506,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD filter_diff_by_files.
FIELD-SYMBOLS: <ls_diff_file> TYPE ty_file_diff.
IF lines( it_files ) = 0.
RETURN.
ENDIF.
" Diff only for specified files
LOOP AT ct_diff_files ASSIGNING <ls_diff_file>.
READ TABLE it_files TRANSPORTING NO FIELDS
WITH KEY file-filename = <ls_diff_file>-filename.
IF sy-subrc <> 0.
DELETE TABLE ct_diff_files FROM <ls_diff_file>.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD get_normalized_fname_with_path. METHOD get_normalized_fname_with_path.
rv_filename = normalize_path( is_diff-path ) rv_filename = normalize_path( is_diff-path )
@ -1030,4 +1010,20 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.
METHOD is_file_requested.
IF lines( it_files ) = 0.
rv_is_file_requested = abap_true.
RETURN.
ENDIF.
READ TABLE it_files WITH KEY file-path = is_status-path
file-filename = is_status-filename
TRANSPORTING NO FIELDS.
rv_is_file_requested = boolc( sy-subrc = 0 ).
ENDMETHOD.
ENDCLASS. ENDCLASS.