Browse Source

git-repack: Properly abort in corrupt repository

In a corrupt repository, git-repack produces a pack that does not
contain needed objects without complaining, and the result of this
combined with -d flag can be very painful -- e.g. a lossage of one
tree object can lead to lossage of blobs reachable only through that
tree.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Linus Torvalds 19 years ago committed by Junio C Hamano
parent
commit
ef07618fdd
  1. 2
      git-repack.sh
  2. 2
      pack-objects.c

2
git-repack.sh

@ -41,7 +41,7 @@ esac @@ -41,7 +41,7 @@ esac
if [ "$local" ]; then
pack_objects="$pack_objects --local"
fi
name=$(git-rev-list --objects $rev_list $(git-rev-parse $rev_parse) |
name=$(git-rev-list --objects $rev_list $(git-rev-parse $rev_parse) 2>&1 |
git-pack-objects --non-empty $pack_objects .tmp-pack) ||
exit 1
if [ -z "$name" ]; then

2
pack-objects.c

@ -524,7 +524,7 @@ int main(int argc, char **argv) @@ -524,7 +524,7 @@ int main(int argc, char **argv)
unsigned char sha1[20];

if (get_sha1_hex(line, sha1))
die("expected sha1, got garbage");
die("expected sha1, got garbage:\n %s", line);
hash = 0;
p = line+40;
while (*p) {

Loading…
Cancel
Save