Repo overview performance improvements (#4541)

* Repo overview performance improvements

* Rework map_repo_list_to_overview

* Reduce usages of get_key

* Fix inline data

* Don't load package descriptions in repo overview

the select is expensive

* suppress titles for non-favorite repositories

* lint

* Update src/ui/zcl_abapgit_gui_page_repo_over.clas.abap

Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>

* optimize render_repo_palette

* Optimize gui_router

* Update zcl_abapgit_gui_page_repo_over.clas.abap

* Update zcl_abapgit_migrations.clas.abap

* remove unused variable

Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Frederik Hudák 2021-02-21 11:29:01 +01:00 committed by GitHub
parent bbeb1e7a58
commit add83f5b94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 44 additions and 44 deletions

View File

@ -5,6 +5,8 @@ CLASS zcl_abapgit_repo DEFINITION
PUBLIC SECTION.
DATA ms_data TYPE zif_abapgit_persistence=>ty_repo READ-ONLY.
METHODS bind_listener
IMPORTING
!ii_listener TYPE REF TO zif_abapgit_repo_listener .
@ -144,7 +146,6 @@ CLASS zcl_abapgit_repo DEFINITION
DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt .
DATA mt_remote TYPE zif_abapgit_definitions=>ty_files_tt .
DATA mv_request_local_refresh TYPE abap_bool .
DATA ms_data TYPE zif_abapgit_persistence=>ty_repo .
DATA mv_request_remote_refresh TYPE abap_bool .
DATA mt_status TYPE zif_abapgit_definitions=>ty_results_tt .
DATA mi_log TYPE REF TO zif_abapgit_log .

View File

@ -87,7 +87,7 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
LOOP AT mt_list INTO lo_repo.
IF lo_repo->get_key( ) = io_repo->get_key( ).
IF lo_repo->ms_data-key = io_repo->ms_data-key.
IF lo_repo = io_repo.
RETURN.
ENDIF.
@ -279,7 +279,7 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
refresh( ).
ENDIF.
LOOP AT mt_list ASSIGNING <lo_list>.
IF <lo_list>->get_key( ) = iv_key.
IF <lo_list>->ms_data-key = iv_key.
ro_repo = <lo_list>.
RETURN.
ENDIF.

View File

@ -721,24 +721,28 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
METHOD render_repo_palette.
DATA li_repo_srv TYPE REF TO zif_abapgit_repo_srv.
DATA lt_repo_obj_list TYPE zif_abapgit_repo_srv=>ty_repo_list.
DATA lt_repo_list TYPE zif_abapgit_persistence=>ty_repos.
DATA lv_repo_json TYPE string.
DATA lv_size TYPE i.
FIELD-SYMBOLS <ls_repo> LIKE LINE OF lt_repo_list.
DATA ls_repo_data LIKE LINE OF lt_repo_list.
FIELD-SYMBOLS:
<ls_repo> LIKE LINE OF lt_repo_list,
<lr_repo_obj> LIKE LINE OF lt_repo_obj_list.
lt_repo_obj_list = zcl_abapgit_repo_srv=>get_instance( )->list( ).
LOOP AT lt_repo_obj_list ASSIGNING <lr_repo_obj>.
ls_repo_data = <lr_repo_obj>->ms_data.
ls_repo_data-local_settings-display_name = <lr_repo_obj>->get_name( ).
APPEND ls_repo_data TO lt_repo_list.
ENDLOOP.
li_repo_srv = zcl_abapgit_repo_srv=>get_instance( ).
lt_repo_list = zcl_abapgit_persist_factory=>get_repo( )->list( ).
lv_size = lines( lt_repo_list ).
SORT lt_repo_list BY local_settings-display_name AS TEXT.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
" Sort list by display name
LOOP AT lt_repo_list ASSIGNING <ls_repo>.
<ls_repo>-local_settings-display_name = li_repo_srv->get( <ls_repo>-key )->get_name( ).
ENDLOOP.
SORT lt_repo_list BY local_settings-display_name AS TEXT.
ri_html->add( 'var repoCatalog = [' ). " Maybe separate this into another method if needed in more places
LOOP AT lt_repo_list ASSIGNING <ls_repo>.
lv_repo_json = |\{ key: "{ <ls_repo>-key

View File

@ -67,8 +67,6 @@ CLASS zcl_abapgit_gui_page_repo_over DEFINITION
ct_overview TYPE ty_overviews,
map_repo_list_to_overview
IMPORTING
it_repo_list TYPE zif_abapgit_persistence=>ty_repos
RETURNING
VALUE(rt_overview) TYPE ty_overviews
RAISING
@ -117,7 +115,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION.
METHOD apply_filter.
@ -182,31 +180,31 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
METHOD map_repo_list_to_overview.
DATA: ls_overview LIKE LINE OF rt_overview,
lo_repo_srv TYPE REF TO zcl_abapgit_repo,
lv_date TYPE d,
lv_time TYPE t.
DATA: ls_overview LIKE LINE OF rt_overview,
lv_date TYPE d,
lv_time TYPE t,
lt_repo_obj_list TYPE zif_abapgit_repo_srv=>ty_repo_list.
FIELD-SYMBOLS: <ls_repo> LIKE LINE OF it_repo_list.
FIELD-SYMBOLS <ls_repo> LIKE LINE OF lt_repo_obj_list.
lt_repo_obj_list = zcl_abapgit_repo_srv=>get_instance( )->list( ).
LOOP AT it_repo_list ASSIGNING <ls_repo>.
LOOP AT lt_repo_obj_list ASSIGNING <ls_repo>.
CLEAR: ls_overview.
lo_repo_srv = zcl_abapgit_repo_srv=>get_instance( )->get( <ls_repo>-key ).
ls_overview-favorite = zcl_abapgit_persistence_user=>get_instance(
)->is_favorite_repo( <ls_repo>-key ).
ls_overview-type = <ls_repo>-offline.
ls_overview-key = <ls_repo>-key.
ls_overview-name = lo_repo_srv->get_name( ).
ls_overview-url = <ls_repo>-url.
ls_overview-package = <ls_repo>-package.
ls_overview-branch = <ls_repo>-branch_name.
ls_overview-created_by = <ls_repo>-created_by.
)->is_favorite_repo( <ls_repo>->ms_data-key ).
ls_overview-type = <ls_repo>->ms_data-offline.
ls_overview-key = <ls_repo>->ms_data-key.
ls_overview-name = <ls_repo>->get_name( ).
ls_overview-url = <ls_repo>->ms_data-url.
ls_overview-package = <ls_repo>->ms_data-package.
ls_overview-branch = <ls_repo>->ms_data-branch_name.
ls_overview-created_by = <ls_repo>->ms_data-created_by.
IF <ls_repo>-created_at IS NOT INITIAL.
CONVERT TIME STAMP <ls_repo>-created_at
IF <ls_repo>->ms_data-created_at IS NOT INITIAL.
CONVERT TIME STAMP <ls_repo>->ms_data-created_at
TIME ZONE mv_time_zone
INTO DATE lv_date
TIME lv_time.
@ -214,10 +212,10 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
ls_overview-created_at = |{ lv_date DATE = USER } { lv_time TIME = USER }|.
ENDIF.
ls_overview-deserialized_by = <ls_repo>-deserialized_by.
ls_overview-deserialized_by = <ls_repo>->ms_data-deserialized_by.
IF <ls_repo>-deserialized_at IS NOT INITIAL.
CONVERT TIME STAMP <ls_repo>-deserialized_at
IF <ls_repo>->ms_data-deserialized_at IS NOT INITIAL.
CONVERT TIME STAMP <ls_repo>->ms_data-deserialized_at
TIME ZONE mv_time_zone
INTO DATE lv_date
TIME lv_time.
@ -433,7 +431,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
ENDMETHOD.
METHOD render_table_header.
CLEAR mt_col_spec.
@ -574,7 +571,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
METHOD zif_abapgit_gui_renderable~render.
mt_overview = map_repo_list_to_overview( zcl_abapgit_persist_factory=>get_repo( )->list( ) ).
mt_overview = map_repo_list_to_overview( ).
apply_order_by( CHANGING ct_overview = mt_overview ).
apply_filter( CHANGING ct_overview = mt_overview ).

View File

@ -141,7 +141,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
CLASS zcl_abapgit_gui_router IMPLEMENTATION.
METHOD abapgit_services_actions.
@ -234,21 +234,19 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
DATA: lv_key TYPE zif_abapgit_persistence=>ty_repo-key,
lv_last_repo_key TYPE zif_abapgit_persistence=>ty_repo-key,
lt_repo_list TYPE zif_abapgit_persistence=>ty_repos.
lt_repo_obj_list TYPE zif_abapgit_repo_srv=>ty_repo_list.
lv_key = ii_event->query( )->get( 'KEY' ).
CASE ii_event->mv_action.
WHEN zcl_abapgit_gui=>c_action-go_home.
lv_last_repo_key = zcl_abapgit_persistence_user=>get_instance( )->get_repo_show( ).
lt_repo_list = zcl_abapgit_persist_factory=>get_repo( )->list( ).
lt_repo_obj_list = zcl_abapgit_repo_srv=>get_instance( )->list( ).
IF lv_last_repo_key IS NOT INITIAL.
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_repo_view
EXPORTING
iv_key = lv_last_repo_key.
ELSEIF lt_repo_list IS NOT INITIAL.
ELSEIF lt_repo_obj_list IS NOT INITIAL.
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_main.
ELSE.
rs_handled-page = zcl_abapgit_gui_page_tutorial=>create( ).