From 18da7861a5bf4cfe7116c1e126e52b45d3fcbbb7 Mon Sep 17 00:00:00 2001 From: "Kyle J. McKay" Date: Wed, 10 Jun 2020 20:17:30 -0700 Subject: [PATCH] git-svn gc: trigger incremental packing if "lotsa" single-object packs Add new `lotsa_loose_objects_or_sopacks` function and call it instead of `lotsa_loose_pruned_objects` when deciding whether or not to call `pack_incremental_loose_objects_if_lockable`. When `git-svn fetch` spits out a whole bunch of single-object packs, they will now be combined at the next opportunity even when there are no actual loose objects (or not enough to trigger a packing). Force `gc.autoPackLimit=1` during any `git-svn` clone/update operation to make sure that an opportunity arises to combine single-object packs even when there are no loose objects themselves. Signed-off-by: Kyle J. McKay --- jobd/gc-git-svn.sh | 2 +- jobd/gc-util-functions.sh | 5 +++++ jobd/update.sh | 1 + taskd/clone.sh | 3 ++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/jobd/gc-git-svn.sh b/jobd/gc-git-svn.sh index 15397cc..7d29b8f 100755 --- a/jobd/gc-git-svn.sh +++ b/jobd/gc-git-svn.sh @@ -32,7 +32,7 @@ umask 002 v_get_proj_from_dir proj proj="${proj%.git}" -if lotsa_loose_pruned_objects; then +if lotsa_loose_objects_or_sopacks; then echo "Packing loose objects ($(date))" if pack_incremental_loose_objects_if_lockable; then echo "Packing and pruning complete ($(date))" diff --git a/jobd/gc-util-functions.sh b/jobd/gc-util-functions.sh index 5c9b8d5..31ae8d7 100755 --- a/jobd/gc-util-functions.sh +++ b/jobd/gc-util-functions.sh @@ -191,6 +191,11 @@ lotsa_single_object_packs() { [ ${_sopacks:-0} -ge 20 ] } +# returns true if either lotsa_loose_pruned_objects or lotsa_single_object_packs is true +lotsa_loose_objects_or_sopacks() { + lotsa_single_object_packs || lotsa_loose_pruned_objects +} + # pack any existing, non-packed loose objects into a new _l.pack file then run prune-packed # note that prune-packed is NOT run beforehand -- the caller must do that if needed # loose objects need not be part of complete commits/trees as --weak-naming is used diff --git a/jobd/update.sh b/jobd/update.sh index 794da5c..2454bda 100755 --- a/jobd/update.sh +++ b/jobd/update.sh @@ -318,6 +318,7 @@ case "$url" in unset GIROCCO_SUPPRESS_AUTO_GC_UPDATE saveconfig="$GIT_CONFIG_PARAMETERS" git_add_config 'gc.auto=1' + git_add_config 'gc.autoPackLimit=1' GIT_DIR=. bang git svn fetch --log-window-size=$var_log_window_size --username="$svnuser" --quiet <"$mtlinesfile" GIROCCO_SUPPRESS_AUTO_GC_UPDATE=1 export GIROCCO_SUPPRESS_AUTO_GC_UPDATE diff --git a/taskd/clone.sh b/taskd/clone.sh index a91f868..c6c84f8 100755 --- a/taskd/clone.sh +++ b/taskd/clone.sh @@ -375,6 +375,7 @@ case "$url" in unset GIROCCO_SUPPRESS_AUTO_GC_UPDATE saveconfig="$GIT_CONFIG_PARAMETERS" git_add_config 'gc.auto=1' + git_add_config 'gc.autoPackLimit=1' # Again, be careful to use GIT_DIR=. here or else new .git subdirectory! GIT_DIR=. git svn fetch --log-window-size=$var_log_window_size --username="$svnuser" --quiet <"$mtlinesfile" || svn_err="$?" GIROCCO_SUPPRESS_AUTO_GC_UPDATE=1 @@ -399,7 +400,7 @@ case "$url" in fi # Pause briefly before retrying to be friendly to the server # Use that time to pack up loose objects if there are "lotsa" them - if ! lotsa_loose_pruned_objects; then + if ! lotsa_loose_objects_or_sopacks; then echo 'Pausing for 120 seconds before retrying' sleep 120 else -- 2.11.4.GIT