Merge branch 'jk/maint-for-each-packed-object'

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
This commit is contained in:
Junio C Hamano 2015-07-09 14:31:43 -07:00
commit c07173f215
2 changed files with 7 additions and 1 deletions

View File

@ -3575,14 +3575,19 @@ int for_each_packed_object(each_packed_object_fn cb, void *data, unsigned flags)
{ {
struct packed_git *p; struct packed_git *p;
int r = 0; int r = 0;
int pack_errors = 0;
prepare_packed_git(); prepare_packed_git();
for (p = packed_git; p; p = p->next) { for (p = packed_git; p; p = p->next) {
if ((flags & FOR_EACH_OBJECT_LOCAL_ONLY) && !p->pack_local) if ((flags & FOR_EACH_OBJECT_LOCAL_ONLY) && !p->pack_local)
continue; continue;
if (open_pack_index(p)) {
pack_errors = 1;
continue;
}
r = for_each_object_in_pack(p, cb, data); r = for_each_object_in_pack(p, cb, data);
if (r) if (r)
break; break;
} }
return r; return r ? r : pack_errors;
} }

View File

@ -218,6 +218,7 @@ test_expect_success 'gc: prune old objects after local clone' '
' '
test_expect_success 'garbage report in count-objects -v' ' 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 &&
: >.git/objects/pack/foo.bar && : >.git/objects/pack/foo.bar &&
: >.git/objects/pack/foo.keep && : >.git/objects/pack/foo.keep &&