From b1582db9b4f4133eacae0f73f8166168e897ed27 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Mon, 28 Aug 2023 10:48:40 -0400 Subject: [PATCH] Improve performance of push for large repos (#6390) Co-authored-by: Lars Hvam --- src/git/zcl_abapgit_git_porcelain.clas.abap | 13 ++++++++----- src/git/zif_abapgit_git_definitions.intf.abap | 4 +++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/git/zcl_abapgit_git_porcelain.clas.abap b/src/git/zcl_abapgit_git_porcelain.clas.abap index 87aec7373..4184385ab 100644 --- a/src/git/zcl_abapgit_git_porcelain.clas.abap +++ b/src/git/zcl_abapgit_git_porcelain.clas.abap @@ -216,7 +216,7 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION. CLEAR lt_nodes. * files - LOOP AT it_expanded ASSIGNING WHERE path = -path. + LOOP AT it_expanded ASSIGNING USING KEY path WHERE path = -path. APPEND INITIAL LINE TO lt_nodes ASSIGNING . -chmod = -chmod. -name = -name. @@ -577,7 +577,7 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION. APPEND -file TO lt_blobs. - READ TABLE lt_expanded ASSIGNING WITH KEY + READ TABLE lt_expanded ASSIGNING WITH TABLE KEY path_name COMPONENTS name = -file-filename path = -file-path. IF sy-subrc <> 0. " new files @@ -595,11 +595,12 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION. -sha1 = lv_sha1. "New sha1 WHEN zif_abapgit_definitions=>c_method-rm. - DELETE lt_expanded - WHERE name = -file-filename - AND path = -file-path. + READ TABLE lt_expanded ASSIGNING WITH TABLE KEY path_name COMPONENTS + name = -file-filename + path = -file-path. ASSERT sy-subrc = 0. + CLEAR -sha1. " Mark as deleted CLEAR -sha1. " Mark as deleted WHEN OTHERS. @@ -607,6 +608,8 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION. ENDCASE. ENDLOOP. + DELETE lt_expanded WHERE sha1 IS INITIAL. + lt_trees = build_trees( lt_expanded ). receive_pack_push( diff --git a/src/git/zif_abapgit_git_definitions.intf.abap b/src/git/zif_abapgit_git_definitions.intf.abap index 47226de3f..f51bc639c 100644 --- a/src/git/zif_abapgit_git_definitions.intf.abap +++ b/src/git/zif_abapgit_git_definitions.intf.abap @@ -92,7 +92,9 @@ INTERFACE zif_abapgit_git_definitions chmod TYPE ty_chmod, END OF ty_expanded . TYPES: - ty_expanded_tt TYPE STANDARD TABLE OF ty_expanded WITH DEFAULT KEY . + ty_expanded_tt TYPE STANDARD TABLE OF ty_expanded WITH DEFAULT KEY + WITH NON-UNIQUE SORTED KEY path_name COMPONENTS path name + WITH NON-UNIQUE SORTED KEY path COMPONENTS path. TYPES: BEGIN OF ty_create,