From c465a6b2e8fbdd5d5c91106734b1d2a12688dc30 Mon Sep 17 00:00:00 2001 From: sbcgua Date: Wed, 28 Nov 2018 08:19:27 +0200 Subject: [PATCH] Offline improvements (#2156) * local reset in zip-based * rebuild_local_checksums on new offline --- src/ui/zcl_abapgit_gui_view_repo.clas.abap | 5 ++- src/ui/zcl_abapgit_services_git.clas.abap | 4 +- src/ui/zcl_abapgit_services_repo.clas.abap | 1 + src/zcl_abapgit_repo.clas.abap | 52 ++++++++++++++++++++++ src/zcl_abapgit_repo_online.clas.abap | 52 ---------------------- 5 files changed, 59 insertions(+), 55 deletions(-) diff --git a/src/ui/zcl_abapgit_gui_view_repo.clas.abap b/src/ui/zcl_abapgit_gui_view_repo.clas.abap index 4db5cb5f0..57065ab8e 100644 --- a/src/ui/zcl_abapgit_gui_view_repo.clas.abap +++ b/src/ui/zcl_abapgit_gui_view_repo.clas.abap @@ -25,6 +25,7 @@ CLASS zcl_abapgit_gui_view_repo DEFINITION !iv_key TYPE zif_abapgit_persistence=>ty_repo-key RAISING zcx_abapgit_exception . + PRIVATE SECTION. DATA: mo_repo TYPE REF TO zcl_abapgit_repo, @@ -183,10 +184,12 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION. ENDIF. " 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' iv_act = |{ zif_abapgit_definitions=>c_action-git_reset }?{ lv_key }| iv_opt = lv_wp_opt ). + ENDIF. + IF mo_repo->is_offline( ) = abap_false. " Online ? lo_tb_advanced->add( iv_txt = 'Background mode' iv_act = |{ zif_abapgit_definitions=>c_action-go_background }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Change remote' diff --git a/src/ui/zcl_abapgit_services_git.clas.abap b/src/ui/zcl_abapgit_services_git.clas.abap index c416b9f59..50478cdf4 100644 --- a/src/ui/zcl_abapgit_services_git.clas.abap +++ b/src/ui/zcl_abapgit_services_git.clas.abap @@ -216,7 +216,7 @@ CLASS ZCL_ABAPGIT_SERVICES_GIT IMPLEMENTATION. 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, lt_unnecessary_local_objs TYPE zif_abapgit_definitions=>ty_tadir_tt, 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, 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. zcx_abapgit_exception=>raise( 'Cannot reset. Local code is write-protected by repo config' ). diff --git a/src/ui/zcl_abapgit_services_repo.clas.abap b/src/ui/zcl_abapgit_services_repo.clas.abap index 8c6a15459..feeeb0f1f 100644 --- a/src/ui/zcl_abapgit_services_repo.clas.abap +++ b/src/ui/zcl_abapgit_services_repo.clas.abap @@ -148,6 +148,7 @@ CLASS ZCL_ABAPGIT_SERVICES_REPO IMPLEMENTATION. lo_repo = zcl_abapgit_repo_srv=>get_instance( )->new_offline( iv_url = ls_popup-url 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 toggle_favorite( lo_repo->get_key( ) ). diff --git a/src/zcl_abapgit_repo.clas.abap b/src/zcl_abapgit_repo.clas.abap index 30854fd9c..f286e99d3 100644 --- a/src/zcl_abapgit_repo.clas.abap +++ b/src/zcl_abapgit_repo.clas.abap @@ -117,6 +117,12 @@ CLASS zcl_abapgit_repo DEFINITION VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt RAISING 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. DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt . @@ -443,6 +449,52 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. 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: TYPE zif_abapgit_definitions=>ty_result, + 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 + WHERE lstate = zif_abapgit_definitions=>c_state-added. + + READ TABLE lt_tadir ASSIGNING + WITH KEY pgmid = 'R3TR' + object = -obj_type + obj_name = -obj_name + devclass = -package + BINARY SEARCH. + IF sy-subrc <> 0. +* skip objects that does not exist locally + CONTINUE. + ENDIF. + + INSERT INTO TABLE lt_tadir_unique. + + ENDLOOP. + + rt_unnecessary_local_objects = lt_tadir_unique. + + ENDMETHOD. + + METHOD is_offline. rv_offline = ms_data-offline. ENDMETHOD. diff --git a/src/zcl_abapgit_repo_online.clas.abap b/src/zcl_abapgit_repo_online.clas.abap index c8c55aa80..e4a3abfab 100644 --- a/src/zcl_abapgit_repo_online.clas.abap +++ b/src/zcl_abapgit_repo_online.clas.abap @@ -39,12 +39,6 @@ CLASS zcl_abapgit_repo_online DEFINITION VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt RAISING 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 REDEFINITION . METHODS get_name @@ -136,52 +130,6 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION. 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: TYPE zif_abapgit_definitions=>ty_result, - 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 - WHERE lstate = zif_abapgit_definitions=>c_state-added. - - READ TABLE lt_tadir ASSIGNING - WITH KEY pgmid = 'R3TR' - object = -obj_type - obj_name = -obj_name - devclass = -package - BINARY SEARCH. - IF sy-subrc <> 0. -* skip objects that does not exist locally - CONTINUE. - ENDIF. - - INSERT INTO TABLE lt_tadir_unique. - - ENDLOOP. - - rt_unnecessary_local_objects = lt_tadir_unique. - - ENDMETHOD. - - METHOD get_url. rv_url = ms_data-url. ENDMETHOD.