Fix lost remote on favorite refresh (#5277)

* Fix reinstantiation on fav_refresh

* rename list_favorites to list_by_keys

* linter fix
This commit is contained in:
Alexander Tsybulsky 2022-01-20 13:05:54 +02:00 committed by GitHub
parent 0db2c9c085
commit cb90be9ce7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 92 additions and 35 deletions

View File

@ -43,7 +43,7 @@ ENDCLASS.
CLASS zcl_abapgit_persistence_repo IMPLEMENTATION.
CLASS ZCL_ABAPGIT_PERSISTENCE_REPO IMPLEMENTATION.
METHOD constructor.
@ -131,6 +131,16 @@ CLASS zcl_abapgit_persistence_repo IMPLEMENTATION.
ENDMETHOD.
METHOD get_repo_from_content.
MOVE-CORRESPONDING from_xml( is_content-data_str ) TO rs_result.
IF rs_result-local_settings-write_protected = abap_false AND
zcl_abapgit_factory=>get_environment( )->is_repo_object_changes_allowed( ) = abap_false.
rs_result-local_settings-write_protected = abap_true.
ENDIF.
rs_result-key = is_content-value.
ENDMETHOD.
METHOD to_xml.
DATA: ls_xml TYPE zif_abapgit_persistence=>ty_repo_xml.
@ -184,6 +194,22 @@ CLASS zcl_abapgit_persistence_repo IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_persist_repo~exists.
DATA lt_keys TYPE zif_abapgit_persistence=>ty_repo_keys.
DATA lt_content TYPE zif_abapgit_persistence=>ty_contents.
APPEND iv_key TO lt_keys.
lt_content = mo_db->list_by_keys(
it_keys = lt_keys
iv_type = zcl_abapgit_persistence_db=>c_type_repo ).
rv_yes = boolc( lines( lt_content ) > 0 ).
ENDMETHOD.
METHOD zif_abapgit_persist_repo~list.
DATA: lt_content TYPE zif_abapgit_persistence=>ty_contents,
@ -199,7 +225,8 @@ CLASS zcl_abapgit_persistence_repo IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_persist_repo~list_favorites.
METHOD zif_abapgit_persist_repo~list_by_keys.
DATA: lt_content TYPE zif_abapgit_persistence=>ty_contents,
ls_content LIKE LINE OF lt_content,
ls_repo LIKE LINE OF rt_repos.
@ -215,7 +242,6 @@ CLASS zcl_abapgit_persistence_repo IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_persist_repo~lock.
mo_db->lock( iv_mode = iv_mode
@ -282,15 +308,4 @@ CLASS zcl_abapgit_persistence_repo IMPLEMENTATION.
iv_data = lv_blob ).
ENDMETHOD.
METHOD get_repo_from_content.
MOVE-CORRESPONDING from_xml( is_content-data_str ) TO rs_result.
IF rs_result-local_settings-write_protected = abap_false AND
zcl_abapgit_factory=>get_environment( )->is_repo_object_changes_allowed( ) = abap_false.
rs_result-local_settings-write_protected = abap_true.
ENDIF.
rs_result-key = is_content-value.
ENDMETHOD.
ENDCLASS.

View File

@ -20,16 +20,23 @@ INTERFACE zif_abapgit_persist_repo
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RAISING
zcx_abapgit_exception .
METHODS exists
IMPORTING
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RETURNING
VALUE(rv_yes) TYPE abap_bool.
METHODS list
RETURNING
VALUE(rt_repos) TYPE zif_abapgit_persistence=>ty_repos
RAISING
zcx_abapgit_exception .
METHODS list_favorites
IMPORTING it_keys TYPE zif_abapgit_persistence=>ty_repo_keys
RETURNING VALUE(rt_repos) TYPE zif_abapgit_persistence=>ty_repos
METHODS list_by_keys
IMPORTING
it_keys TYPE zif_abapgit_persistence=>ty_repo_keys
RETURNING
VALUE(rt_repos) TYPE zif_abapgit_persistence=>ty_repos
RAISING
zcx_abapgit_exception .
zcx_abapgit_exception .
METHODS lock
IMPORTING
!iv_mode TYPE enqmode

View File

@ -82,7 +82,7 @@ ENDCLASS.
CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
CLASS ZCL_ABAPGIT_REPO_SRV IMPLEMENTATION.
METHOD add.
@ -147,16 +147,6 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_repo_srv~list_favorites.
IF mv_init = abap_false OR mv_only_favorites = abap_false.
refresh_favorites( ).
ENDIF.
rt_list = mt_list.
ENDMETHOD.
METHOD refresh_all.
@ -176,19 +166,41 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
ENDMETHOD.
METHOD refresh_favorites.
DATA: lt_list TYPE zif_abapgit_persistence=>ty_repos,
lt_user_favorites TYPE zif_abapgit_persist_user=>ty_favorites.
FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list.
DATA lo_repo TYPE REF TO zcl_abapgit_repo.
DATA lv_repo_index TYPE i.
DATA lo_repo_db TYPE REF TO zif_abapgit_persist_repo.
CLEAR mt_list.
FIELD-SYMBOLS: <ls_repo_record> LIKE LINE OF lt_list.
lo_repo_db = zcl_abapgit_persist_factory=>get_repo( ).
lt_user_favorites = zcl_abapgit_persistence_user=>get_instance( )->get_favorites( ).
lt_list = zcl_abapgit_persist_factory=>get_repo( )->list_favorites( lt_user_favorites ).
LOOP AT lt_list ASSIGNING <ls_list>.
instantiate_and_add( <ls_list> ).
lt_list = lo_repo_db->list_by_keys( lt_user_favorites ).
SORT lt_list BY package.
LOOP AT mt_list INTO lo_repo.
lv_repo_index = sy-tabix.
READ TABLE lt_list TRANSPORTING NO FIELDS WITH KEY package = lo_repo->get_package( ).
IF sy-subrc = 0.
DELETE lt_list INDEX sy-tabix.
CONTINUE. " Leave the repo be
ELSEIF lo_repo_db->exists( lo_repo->get_key( ) ) = abap_false.
" Not a fav, and also does not exist, probably uninstalled
DELETE mt_list INDEX lv_repo_index.
ENDIF.
ENDLOOP.
" Create remaining (new) favs
LOOP AT lt_list ASSIGNING <ls_repo_record>.
instantiate_and_add( <ls_repo_record> ).
ENDLOOP.
mv_init = abap_true.
@ -441,6 +453,30 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_repo_srv~list_favorites.
DATA lt_user_favorites TYPE zif_abapgit_persist_user=>ty_favorites.
DATA lo_repo TYPE REF TO zcl_abapgit_repo.
lt_user_favorites = zcl_abapgit_persistence_user=>get_instance( )->get_favorites( ).
SORT lt_user_favorites BY table_line.
IF mv_init = abap_false OR mv_only_favorites = abap_false.
refresh_favorites( ).
ENDIF.
LOOP AT mt_list INTO lo_repo.
READ TABLE lt_user_favorites
TRANSPORTING NO FIELDS
WITH KEY table_line = lo_repo->get_key( ).
IF sy-subrc = 0.
APPEND lo_repo TO rt_list.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_repo_srv~new_offline.
DATA: ls_repo TYPE zif_abapgit_persistence=>ty_repo,
@ -636,5 +672,4 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
ENDIF.
ENDMETHOD.
ENDCLASS.