Merge branch 'jk/maint-for-each-packed-object'
authorJunio C Hamano <gitster@pobox.com>
Thu, 9 Jul 2015 21:31:43 +0000 (14:31 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 Jul 2015 21:31:43 +0000 (14:31 -0700)
The for_each_packed_object() API function did not iterate over
objects in a packfile that hasn't been used yet.

* jk/maint-for-each-packed-object:
for_each_packed_object: automatically open pack index

sha1_file.c
t/t5304-prune.sh
index 77cd81db319c4863e38be3b03260ea8d16f3e222..c0205a0cb2bd65ef0a5d8b90f8b3e4aec33e37c8 100644 (file)
@@ -3575,14 +3575,19 @@ int for_each_packed_object(each_packed_object_fn cb, void *data, unsigned flags)
 {
        struct packed_git *p;
        int r = 0;
+       int pack_errors = 0;
 
        prepare_packed_git();
        for (p = packed_git; p; p = p->next) {
                if ((flags & FOR_EACH_OBJECT_LOCAL_ONLY) && !p->pack_local)
                        continue;
+               if (open_pack_index(p)) {
+                       pack_errors = 1;
+                       continue;
+               }
                r = for_each_object_in_pack(p, cb, data);
                if (r)
                        break;
        }
-       return r;
+       return r ? r : pack_errors;
 }
index 0794d33dad6cddcb6be58663c16cbe67be600e47..023d7c6f7b6008536cbd83b1873f0b00b9148bbd 100755 (executable)
@@ -218,6 +218,7 @@ test_expect_success 'gc: prune old objects after local clone' '
 '
 
 test_expect_success 'garbage report in count-objects -v' '
+       test_when_finished "rm -f .git/objects/pack/fake*" &&
        : >.git/objects/pack/foo &&
        : >.git/objects/pack/foo.bar &&
        : >.git/objects/pack/foo.keep &&