From d76b334a38b0219d82c924d048027d0dbdd37f8c Mon Sep 17 00:00:00 2001 From: "Kyle J. McKay" Date: Wed, 2 Sep 2020 15:20:43 -0700 Subject: [PATCH] taskd/clone.sh: clear more failed clone crud A failed clone should not have any of these: - index - refslogs/* - logs/* - info/refs - objects/info/packs - objects/info/commit-graph Especially if it failed because it exceeded a size limit. Make sure they get removed when appropriate to avoid unnecessarily wasting disk space. Also make sure that the exceeds limit cleanup always takes place regardless of whether or not an `objects` directory exists. Signed-off-by: Kyle J. McKay --- taskd/clone.sh | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/taskd/clone.sh b/taskd/clone.sh index 94e543b..c5eb796 100755 --- a/taskd/clone.sh +++ b/taskd/clone.sh @@ -102,6 +102,9 @@ _cleanup_failed_clone_bloat() { # now garbage to be removed rm -f FETCH_HEAD + # Any pre-existing index doesn't belong and is now garbage + rm -f index + # Remove any left-over svn dir from a previous failed attempt rm -rf svn @@ -117,17 +120,30 @@ _cleanup_failed_clone_bloat() { # Remove any git-svn junk cleanup_git_svn_leftovers + + # There should not be any reflogs files after a failed clone + if [ -d reflogs ]; then + find -H reflogs -type f -exec rm -f '{}' + >/dev/null 2>&1 || : + fi + + # Nor any ref logs (which are normally disabled) + if [ -d logs ]; then + find -H logs -type f -exec rm -f '{}' + >/dev/null 2>&1 || : + fi } clear_all_objects_and_packs() { - if [ -d objects ]; then - # make sure the repository is not left broken - printf '%s\n' 'ref: refs/heads/master' >HEAD || : - rm -f packed-refs || : - find -H refs objects -type f -exec rm -f '{}' + >/dev/null 2>&1 || : - ! [ -d htmlcache ] || { >htmlcache/changed; } 2>/dev/null || : + # make sure the repository is not left broken + printf '%s\n' 'ref: refs/heads/master' >HEAD || : + rm -f packed-refs info/refs objects/info/packs objects/info/commit-graph || : + cleardirs= + [ ! -d refs ] || cleardirs="refs" + [ ! -d objects ] || cleardirs="${cleardirs:+$cleardirs }objects" + if [ -n "$cleardirs" ]; then + find -H $cleardirs -type f -exec rm -f '{}' + >/dev/null 2>&1 || : fi _cleanup_failed_clone_bloat + ! [ -d htmlcache ] || { >htmlcache/changed; } 2>/dev/null || : } exit_err=0 -- 2.11.4.GIT