git-repack: Properly abort in corrupt repository
authorLinus Torvalds <torvalds@osdl.org>
Mon, 21 Nov 2005 20:38:31 +0000 (12:38 -0800)
committerJunio C Hamano <junkio@cox.net>
Mon, 21 Nov 2005 22:08:49 +0000 (14:08 -0800)
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>
git-repack.sh
pack-objects.c

index 4e16d34..c0f271d 100755 (executable)
@@ -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
index 4e941e7..8864a31 100644 (file)
@@ -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) {