]> asedeno.scripts.mit.edu Git - git.git/commitdiff
Merge branch 'maint-1.5.6' into maint-1.6.0
authorJunio C Hamano <gitster@pobox.com>
Fri, 28 Aug 2009 03:03:35 +0000 (20:03 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 28 Aug 2009 03:03:35 +0000 (20:03 -0700)
* maint-1.5.6:
  revision traversal and pack: notice and die on missing commit

revision.c
t/t5307-pack-missing-commit.sh [new file with mode: 0755]

index 45fd7a366055d254529c53b21a06c6340427fa49..94c210f5ae6a62cdeb01475add2e800e9c135d99 100644 (file)
@@ -1538,14 +1538,16 @@ static struct commit *get_revision_1(struct rev_info *revs)
                            (commit->date < revs->max_age))
                                continue;
                        if (add_parents_to_list(revs, commit, &revs->commits, NULL) < 0)
-                               return NULL;
+                               die("Failed to traverse parents of commit %s",
+                                   sha1_to_hex(commit->object.sha1));
                }
 
                switch (simplify_commit(revs, commit)) {
                case commit_ignore:
                        continue;
                case commit_error:
-                       return NULL;
+                       die("Failed to simplify parents of commit %s",
+                           sha1_to_hex(commit->object.sha1));
                default:
                        return commit;
                }
diff --git a/t/t5307-pack-missing-commit.sh b/t/t5307-pack-missing-commit.sh
new file mode 100755 (executable)
index 0000000..ae52a18
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+test_description='pack should notice missing commit objects'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+       for i in 1 2 3 4 5
+       do
+               echo "$i" >"file$i" &&
+               git add "file$i" &&
+               test_tick &&
+               git commit -m "$i" &&
+               git tag "tag$i"
+       done &&
+       obj=$(git rev-parse --verify tag3) &&
+       fanout=$(expr "$obj" : "\(..\)") &&
+       remainder=$(expr "$obj" : "..\(.*\)") &&
+       rm -f ".git/objects/$fanout/$remainder"
+'
+
+test_expect_success 'check corruption' '
+       test_must_fail git fsck
+'
+
+test_expect_success 'rev-list notices corruption (1)' '
+       test_must_fail git rev-list HEAD
+'
+
+test_expect_success 'rev-list notices corruption (2)' '
+       test_must_fail git rev-list --objects HEAD
+'
+
+test_expect_success 'pack-objects notices corruption' '
+       echo HEAD |
+       test_must_fail git pack-objects --revs pack
+'
+
+test_done