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
RAISING
zcx_abapgit_exception .
METHODS filter_diff_by_files
METHODS is_file_requested
IMPORTING
!it_files TYPE zif_abapgit_definitions=>ty_stage_tt
CHANGING
!ct_diff_files TYPE ty_file_diffs .
it_files TYPE zif_abapgit_definitions=>ty_stage_tt
is_status TYPE zif_abapgit_definitions=>ty_result
RETURNING
VALUE(rv_is_file_requested) TYPE abap_bool.
ENDCLASS.
@ -459,18 +460,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
path ASCENDING
filename ASCENDING.
LOOP AT lt_status ASSIGNING <ls_status> WHERE match IS INITIAL.
IF is_file_requested( it_files = it_files
is_status = <ls_status> ) = abap_true.
append_diff( it_remote = lt_remote
it_local = lt_local
is_status = <ls_status> ).
ENDLOOP.
ENDIF.
filter_diff_by_files(
EXPORTING
it_files = it_files
CHANGING
ct_diff_files = mt_diff_files ).
ENDLOOP.
ENDIF.
ENDMETHOD.
@ -504,28 +506,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
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.
rv_filename = normalize_path( is_diff-path )
@ -1030,4 +1010,20 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
ENDCASE.
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.