Re: [PATCH] git-repack: create new packs inside $PACKDIR, not cwd
- From
Junio C Hamano <junkio@cox.net>
- Date
- Sep 4, 2006, 09:50 UTC
- Message-ID
- <7vr6ysneor.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <7vveo4nfbg.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:
> Writing into $cwd was certainly a carelessness; we tend to use > $GIT_DIR/ for this kind of thing.
In other words...
-- >8 -- From: Martin Langhoff <martin@catalyst.net.nz> Date: Mon, 4 Sep 2006 17:42:32 +1200 Subject: [PATCH] git-repack: create new packs inside $GIT_DIR, not cwd
Avoid failing when cwd is !writable by writing the packfiles in $GIT_DIR, which is more in line with other commands.
Without this, git-repack was failing when run from crontab by non-root user accounts. For large repositories, this also makes the mv operation a lot cheaper, and avoids leaving temp packfiles around the fs upon failure.
Signed-off-by: Martin Langhoff <martin@catalyst.net.nz> Signed-off-by: Junio C Hamano <junkio@cox.net> --- git-repack.sh | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/git-repack.sh b/git-repack.sh index 584a732..b525fc5 100755 --- a/git-repack.sh +++ b/git-repack.sh @@ -24,8 +24,10 @@ do shift done -rm -f .tmp-pack-* PACKDIR="$GIT_OBJECT_DIRECTORY/pack" +PACKTMP="$GIT_DIR/.tmp-$$-pack" +rm -f "$PACKTMP"-* +trap 'rm -f "$PACKTMP"-*' 0 1 2 3 15 # There will be more repacking strategies to come... case ",$all_into_one," in @@ -42,11 +44,12 @@ case ",$all_into_one," in find . -type f \( -name '*.pack' -o -name '*.idx' \) -print` ;; esac + pack_objects="$pack_objects $local $quiet $no_reuse_delta$extra" name=$( { git-rev-list --objects --all $rev_list || echo "git-rev-list died with exit code $?" } | - git-pack-objects --non-empty $pack_objects .tmp-pack) || + git-pack-objects --non-empty $pack_objects "$PACKTMP") || exit 1 if [ -z "$name" ]; then echo Nothing new to pack. @@ -64,8 +67,8 @@ else "$PACKDIR/old-pack-$name.$sfx" fi done && - mv -f .tmp-pack-$name.pack "$PACKDIR/pack-$name.pack" && - mv -f .tmp-pack-$name.idx "$PACKDIR/pack-$name.idx" && + mv -f "$PACKTMP-$name.pack" "$PACKDIR/pack-$name.pack" && + mv -f "$PACKTMP-$name.idx" "$PACKDIR/pack-$name.idx" && test -f "$PACKDIR/pack-$name.pack" && test -f "$PACKDIR/pack-$name.idx" || { echo >&2 "Couldn't replace the existing pack with updated one."
-- 1.4.2.g99d7d -- VGER BF report: U 0.870206