Avoid failing when cwd is !writable by writing the packfiles directly in the $PACKDIR. 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@xxxxxxxxxxxxxxx> --- git-repack.sh | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/git-repack.sh b/git-repack.sh index 584a732..ccc8e43 100755 --- a/git-repack.sh +++ b/git-repack.sh @@ -42,11 +42,13 @@ case ",$all_into_one," in find . -type f \( -name '*.pack' -o -name '*.idx' \) -print` ;; esac + +mkdir -p "$PACKDIR" || exit 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 "$PACKDIR/.tmp-pack") || exit 1 if [ -z "$name" ]; then echo Nothing new to pack. @@ -54,7 +56,6 @@ else if test "$quiet" != '-q'; then echo "Pack pack-$name created." fi - mkdir -p "$PACKDIR" || exit for sfx in pack idx do @@ -64,8 +65,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 "$PACKDIR/.tmp-pack-$name.pack" "$PACKDIR/pack-$name.pack" && + mv -f "$PACKDIR/.tmp-pack-$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.gdfe7 -- VGER BF report: S 1 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html