summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 29f4ad8)
raw | patch | inline | side by side (parent: 29f4ad8)
author | Junio C Hamano <junkio@cox.net> | |
Sun, 25 Jun 2006 12:28:58 +0000 (05:28 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sun, 25 Jun 2006 12:28:58 +0000 (05:28 -0700) |
After a clone, packfiles are read-only by default and "mv" to
replace the pack with a new one goes interactive, asking if the
user wants to replace it. If one is successfully moved and the
other is not, the pack and its idx would become out-of-sync and
corrupts the repository.
Recovering is straightforward -- it is just the matter of
finding the remaining .tmp-pack-* and make sure they are both
moved -- but we should be extra careful not to do something so
alarming to the users.
Signed-off-by: Junio C Hamano <junkio@cox.net>
replace the pack with a new one goes interactive, asking if the
user wants to replace it. If one is successfully moved and the
other is not, the pack and its idx would become out-of-sync and
corrupts the repository.
Recovering is straightforward -- it is just the matter of
finding the remaining .tmp-pack-* and make sure they are both
moved -- but we should be extra careful not to do something so
alarming to the users.
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-repack.sh | patch | blob | history |
diff --git a/git-repack.sh b/git-repack.sh
index eb75c8cda95dabe190cfe9ddba0c6bd7072615f2..640ad8d90b9a9afd00506a9697af1d3e560e1255 100755 (executable)
--- a/git-repack.sh
+++ b/git-repack.sh
fi
mkdir -p "$PACKDIR" || exit
- mv .tmp-pack-$name.pack "$PACKDIR/pack-$name.pack" &&
- mv .tmp-pack-$name.idx "$PACKDIR/pack-$name.idx" ||
- exit
+ for sfx in pack idx
+ do
+ if test -f "$PACKDIR/pack-$name.$sfx"
+ then
+ mv -f "$PACKDIR/pack-$name.$sfx" \
+ "$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" &&
+ test -f "$PACKDIR/pack-$name.pack" &&
+ test -f "$PACKDIR/pack-$name.idx" || {
+ echo >&2 "Couldn't replace the existing pack with updated one."
+ echo >&2 "The original set of packs have been saved as"
+ echo >&2 "old-pack-$name.{pack,idx} in $PACKDIR."
+ exit 1
+ }
+ rm -f "$PACKDIR/old-pack-$name.pack" "$PACKDIR/old-pack-$name.idx"
fi
if test "$remove_redundant" = t