From bb82f2c8bdbb86e947261ecf2c804ba40ce53b37 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Sun, 22 Jul 2018 10:32:33 +0000 Subject: [PATCH] Refresh online repo: call BRANCH_LIST just once Before this commit is applied BRANCH_LIST is called twice while refreshing an online repo. This leads to two identical HTTP calls. After this commit is applied BRANCH_LIST is only called once and therefore only one HTTP request is sent. --- src/git/zcl_abapgit_git_porcelain.clas.abap | 13 +++++++----- src/git/zcl_abapgit_git_transport.clas.abap | 13 +++++++----- src/zcl_abapgit_repo_online.clas.abap | 22 +++++++++++---------- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/git/zcl_abapgit_git_porcelain.clas.abap b/src/git/zcl_abapgit_git_porcelain.clas.abap index 29f5f49fc..dcd35474e 100644 --- a/src/git/zcl_abapgit_git_porcelain.clas.abap +++ b/src/git/zcl_abapgit_git_porcelain.clas.abap @@ -6,11 +6,12 @@ CLASS zcl_abapgit_git_porcelain DEFINITION PUBLIC SECTION. CLASS-METHODS pull IMPORTING - !io_repo TYPE REF TO zcl_abapgit_repo_online + !io_repo TYPE REF TO zcl_abapgit_repo_online EXPORTING - !et_files TYPE zif_abapgit_definitions=>ty_files_tt - !et_objects TYPE zif_abapgit_definitions=>ty_objects_tt - !ev_branch TYPE zif_abapgit_definitions=>ty_sha1 + !et_files TYPE zif_abapgit_definitions=>ty_files_tt + !et_objects TYPE zif_abapgit_definitions=>ty_objects_tt + !ev_branch TYPE zif_abapgit_definitions=>ty_sha1 + !eo_branch_list TYPE REF TO zcl_abapgit_git_branch_list RAISING zcx_abapgit_exception . CLASS-METHODS push @@ -351,6 +352,7 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION. CLEAR et_files. CLEAR et_objects. CLEAR ev_branch. + CLEAR eo_branch_list. zcl_abapgit_git_transport=>upload_pack( EXPORTING @@ -358,7 +360,8 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION. iv_branch_name = io_repo->get_branch_name( ) IMPORTING et_objects = et_objects - ev_branch = ev_branch ). + ev_branch = ev_branch + eo_branch_list = eo_branch_list ). READ TABLE et_objects INTO ls_object WITH KEY sha1 = ev_branch type = zif_abapgit_definitions=>gc_type-commit. IF sy-subrc <> 0. diff --git a/src/git/zcl_abapgit_git_transport.clas.abap b/src/git/zcl_abapgit_git_transport.clas.abap index ba543a624..048b01c5e 100644 --- a/src/git/zcl_abapgit_git_transport.clas.abap +++ b/src/git/zcl_abapgit_git_transport.clas.abap @@ -12,6 +12,7 @@ CLASS zcl_abapgit_git_transport DEFINITION it_branches TYPE zif_abapgit_definitions=>ty_git_branch_list_tt OPTIONAL EXPORTING et_objects TYPE zif_abapgit_definitions=>ty_objects_tt ev_branch TYPE zif_abapgit_definitions=>ty_sha1 + eo_branch_list TYPE REF TO zcl_abapgit_git_branch_list RAISING zcx_abapgit_exception. * local to remote @@ -46,6 +47,7 @@ CLASS zcl_abapgit_git_transport DEFINITION iv_branch_name TYPE string EXPORTING eo_client TYPE REF TO zcl_abapgit_http_client ev_branch TYPE zif_abapgit_definitions=>ty_sha1 + eo_branch_list TYPE REF TO zcl_abapgit_git_branch_list RAISING zcx_abapgit_exception. CLASS-METHODS parse @@ -98,18 +100,16 @@ CLASS zcl_abapgit_git_transport IMPLEMENTATION. METHOD find_branch. - DATA: lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list. - branch_list( EXPORTING iv_url = iv_url iv_service = iv_service IMPORTING eo_client = eo_client - eo_branch_list = lo_branch_list ). + eo_branch_list = eo_branch_list ). IF ev_branch IS SUPPLIED. - ev_branch = lo_branch_list->find_by_name( iv_branch_name )-sha1. + ev_branch = eo_branch_list->find_by_name( iv_branch_name )-sha1. ENDIF. ENDMETHOD. "find_branch @@ -229,7 +229,9 @@ CLASS zcl_abapgit_git_transport IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_branches. - CLEAR et_objects. + CLEAR: et_objects, + ev_branch, + eo_branch_list. find_branch( EXPORTING @@ -238,6 +240,7 @@ CLASS zcl_abapgit_git_transport IMPLEMENTATION. iv_branch_name = iv_branch_name IMPORTING eo_client = lo_client + eo_branch_list = eo_branch_list ev_branch = ev_branch ). IF it_branches IS INITIAL. diff --git a/src/zcl_abapgit_repo_online.clas.abap b/src/zcl_abapgit_repo_online.clas.abap index 20ba9fc88..6f1967f29 100644 --- a/src/zcl_abapgit_repo_online.clas.abap +++ b/src/zcl_abapgit_repo_online.clas.abap @@ -91,7 +91,6 @@ CLASS zcl_abapgit_repo_online DEFINITION DATA mt_objects TYPE zif_abapgit_definitions=>ty_objects_tt . DATA mv_branch TYPE zif_abapgit_definitions=>ty_sha1 . DATA mv_initialized TYPE abap_bool . - DATA mo_branches TYPE REF TO zcl_abapgit_git_branch_list . DATA mt_status TYPE zif_abapgit_definitions=>ty_results_tt . DATA mv_code_inspector_successful TYPE abap_bool . @@ -101,6 +100,8 @@ CLASS zcl_abapgit_repo_online DEFINITION RAISING zcx_abapgit_exception . METHODS actualize_head_branch + IMPORTING + io_branch_list TYPE REF TO zcl_abapgit_git_branch_list RAISING zcx_abapgit_exception . ENDCLASS. @@ -112,7 +113,7 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION. METHOD actualize_head_branch. DATA lv_branch_name TYPE string. - lv_branch_name = mo_branches->get_head( )-name. + lv_branch_name = io_branch_list->get_head( )-name. IF lv_branch_name <> ms_data-head_branch. set( iv_head_branch = lv_branch_name ). @@ -362,8 +363,9 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION. METHOD refresh. - DATA: lo_progress TYPE REF TO zcl_abapgit_progress, - lx_exception TYPE REF TO zcx_abapgit_exception. + DATA: lo_progress TYPE REF TO zcl_abapgit_progress, + lx_exception TYPE REF TO zcx_abapgit_exception, + lo_branch_list TYPE REF TO zcl_abapgit_git_branch_list. super->refresh( iv_drop_cache ). reset_status( ). @@ -377,14 +379,14 @@ CLASS ZCL_ABAPGIT_REPO_ONLINE IMPLEMENTATION. zcl_abapgit_git_porcelain=>pull( EXPORTING - io_repo = me + io_repo = me IMPORTING - et_files = mt_remote - et_objects = mt_objects - ev_branch = mv_branch ). + et_files = mt_remote + et_objects = mt_objects + ev_branch = mv_branch + eo_branch_list = lo_branch_list ). - mo_branches = zcl_abapgit_git_transport=>branches( get_url( ) ). - actualize_head_branch( ). + actualize_head_branch( lo_branch_list ). mv_initialized = abap_true.