Offline improvements (#2156)

* local reset in zip-based

* rebuild_local_checksums on new offline
This commit is contained in:
sbcgua 2018-11-28 08:19:27 +02:00 committed by Lars Hvam
parent 48bb8be737
commit c465a6b2e8
5 changed files with 59 additions and 55 deletions

View File

@ -25,6 +25,7 @@ CLASS zcl_abapgit_gui_view_repo DEFINITION
!iv_key TYPE zif_abapgit_persistence=>ty_repo-key !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
PRIVATE SECTION. PRIVATE SECTION.
DATA: mo_repo TYPE REF TO zcl_abapgit_repo, DATA: mo_repo TYPE REF TO zcl_abapgit_repo,
@ -183,10 +184,12 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
ENDIF. ENDIF.
" Build advanced drop-down ======================== " Build advanced drop-down ========================
IF mo_repo->is_offline( ) = abap_false. " Online ? IF iv_rstate IS NOT INITIAL OR iv_lstate IS NOT INITIAL. " In case of asyncronicities
lo_tb_advanced->add( iv_txt = 'Reset local' lo_tb_advanced->add( iv_txt = 'Reset local'
iv_act = |{ zif_abapgit_definitions=>c_action-git_reset }?{ lv_key }| iv_act = |{ zif_abapgit_definitions=>c_action-git_reset }?{ lv_key }|
iv_opt = lv_wp_opt ). iv_opt = lv_wp_opt ).
ENDIF.
IF mo_repo->is_offline( ) = abap_false. " Online ?
lo_tb_advanced->add( iv_txt = 'Background mode' lo_tb_advanced->add( iv_txt = 'Background mode'
iv_act = |{ zif_abapgit_definitions=>c_action-go_background }?{ lv_key }| ). iv_act = |{ zif_abapgit_definitions=>c_action-go_background }?{ lv_key }| ).
lo_tb_advanced->add( iv_txt = 'Change remote' lo_tb_advanced->add( iv_txt = 'Change remote'

View File

@ -216,7 +216,7 @@ CLASS ZCL_ABAPGIT_SERVICES_GIT IMPLEMENTATION.
METHOD reset. METHOD reset.
DATA: lo_repo TYPE REF TO zcl_abapgit_repo_online, DATA: lo_repo TYPE REF TO zcl_abapgit_repo,
lv_answer TYPE c LENGTH 1, lv_answer TYPE c LENGTH 1,
lt_unnecessary_local_objs TYPE zif_abapgit_definitions=>ty_tadir_tt, lt_unnecessary_local_objs TYPE zif_abapgit_definitions=>ty_tadir_tt,
lt_selected LIKE lt_unnecessary_local_objs, lt_selected LIKE lt_unnecessary_local_objs,
@ -224,7 +224,7 @@ CLASS ZCL_ABAPGIT_SERVICES_GIT IMPLEMENTATION.
ls_checks TYPE zif_abapgit_definitions=>ty_delete_checks, ls_checks TYPE zif_abapgit_definitions=>ty_delete_checks,
li_popups TYPE REF TO zif_abapgit_popups. li_popups TYPE REF TO zif_abapgit_popups.
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). lo_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
IF lo_repo->get_local_settings( )-write_protected = abap_true. IF lo_repo->get_local_settings( )-write_protected = abap_true.
zcx_abapgit_exception=>raise( 'Cannot reset. Local code is write-protected by repo config' ). zcx_abapgit_exception=>raise( 'Cannot reset. Local code is write-protected by repo config' ).

View File

@ -148,6 +148,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION.
lo_repo = zcl_abapgit_repo_srv=>get_instance( )->new_offline( lo_repo = zcl_abapgit_repo_srv=>get_instance( )->new_offline(
iv_url = ls_popup-url iv_url = ls_popup-url
iv_package = ls_popup-package ). iv_package = ls_popup-package ).
lo_repo->rebuild_local_checksums( ).
zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lo_repo->get_key( ) ). " Set default repo for user zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lo_repo->get_key( ) ). " Set default repo for user
toggle_favorite( lo_repo->get_key( ) ). toggle_favorite( lo_repo->get_key( ) ).

View File

@ -117,6 +117,12 @@ CLASS zcl_abapgit_repo DEFINITION
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS get_unnecessary_local_objs
RETURNING
VALUE(rt_unnecessary_local_objects) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
PROTECTED SECTION. PROTECTED SECTION.
DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt . DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt .
@ -443,6 +449,52 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_unnecessary_local_objs.
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
lt_tadir_unique TYPE HASHED TABLE OF zif_abapgit_definitions=>ty_tadir
WITH UNIQUE KEY pgmid object obj_name,
lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt,
lt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
lt_status TYPE zif_abapgit_definitions=>ty_results_tt,
lv_package TYPE zif_abapgit_persistence=>ty_repo-package.
FIELD-SYMBOLS: <ls_status> TYPE zif_abapgit_definitions=>ty_result,
<ls_tadir> TYPE zif_abapgit_definitions=>ty_tadir.
" delete objects which are added locally but are not in remote repo
lt_local = get_files_local( ).
lt_remote = get_files_remote( ).
lt_status = status( ).
lv_package = get_package( ).
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( lv_package ).
SORT lt_tadir BY pgmid ASCENDING object ASCENDING obj_name ASCENDING devclass ASCENDING.
LOOP AT lt_status ASSIGNING <ls_status>
WHERE lstate = zif_abapgit_definitions=>c_state-added.
READ TABLE lt_tadir ASSIGNING <ls_tadir>
WITH KEY pgmid = 'R3TR'
object = <ls_status>-obj_type
obj_name = <ls_status>-obj_name
devclass = <ls_status>-package
BINARY SEARCH.
IF sy-subrc <> 0.
* skip objects that does not exist locally
CONTINUE.
ENDIF.
INSERT <ls_tadir> INTO TABLE lt_tadir_unique.
ENDLOOP.
rt_unnecessary_local_objects = lt_tadir_unique.
ENDMETHOD.
METHOD is_offline. METHOD is_offline.
rv_offline = ms_data-offline. rv_offline = ms_data-offline.
ENDMETHOD. ENDMETHOD.

View File

@ -39,12 +39,6 @@ CLASS zcl_abapgit_repo_online DEFINITION
VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS get_unnecessary_local_objs
RETURNING
VALUE(rt_unnecessary_local_objects) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
METHODS get_files_remote METHODS get_files_remote
REDEFINITION . REDEFINITION .
METHODS get_name METHODS get_name
@ -136,52 +130,6 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_unnecessary_local_objs.
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
lt_tadir_unique TYPE HASHED TABLE OF zif_abapgit_definitions=>ty_tadir
WITH UNIQUE KEY pgmid object obj_name,
lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt,
lt_remote TYPE zif_abapgit_definitions=>ty_files_tt,
lt_status TYPE zif_abapgit_definitions=>ty_results_tt,
lv_package TYPE zif_abapgit_persistence=>ty_repo-package.
FIELD-SYMBOLS: <ls_status> TYPE zif_abapgit_definitions=>ty_result,
<ls_tadir> TYPE zif_abapgit_definitions=>ty_tadir.
" delete objects which are added locally but are not in remote repo
lt_local = get_files_local( ).
lt_remote = get_files_remote( ).
lt_status = status( ).
lv_package = get_package( ).
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( lv_package ).
SORT lt_tadir BY pgmid ASCENDING object ASCENDING obj_name ASCENDING devclass ASCENDING.
LOOP AT lt_status ASSIGNING <ls_status>
WHERE lstate = zif_abapgit_definitions=>c_state-added.
READ TABLE lt_tadir ASSIGNING <ls_tadir>
WITH KEY pgmid = 'R3TR'
object = <ls_status>-obj_type
obj_name = <ls_status>-obj_name
devclass = <ls_status>-package
BINARY SEARCH.
IF sy-subrc <> 0.
* skip objects that does not exist locally
CONTINUE.
ENDIF.
INSERT <ls_tadir> INTO TABLE lt_tadir_unique.
ENDLOOP.
rt_unnecessary_local_objects = lt_tadir_unique.
ENDMETHOD.
METHOD get_url. METHOD get_url.
rv_url = ms_data-url. rv_url = ms_data-url.
ENDMETHOD. ENDMETHOD.