diff options
Diffstat (limited to 'sha1_name.c')
-rw-r--r-- | sha1_name.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/sha1_name.c b/sha1_name.c index a5578f718e..c1f24a1b43 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -176,14 +176,26 @@ static void unique_in_pack(int len, } } +struct disambiguate_data { + int len; + const unsigned char *bin_pfx; + struct disambiguate_state *ds; +}; + +static int find_short_packed_object_fn(struct packed_git *p, void *data) +{ + struct disambiguate_data *d = (struct disambiguate_data *) data; + unique_in_pack(d->len, d->bin_pfx, p, d->ds); + return 0; +} + static void find_short_packed_object(int len, const unsigned char *bin_pfx, struct disambiguate_state *ds) { - struct packed_git *p; + struct disambiguate_data d = {len, bin_pfx, ds}; prepare_packed_git(); - for (p = packed_git; p && !ds->ambiguous; p = p->next) - unique_in_pack(len, bin_pfx, p, ds); + foreach_packed_git(find_short_packed_object_fn, NULL, &d); } #define SHORT_NAME_NOT_FOUND (-1) |