summaryrefslogtreecommitdiff
path: root/sha1_name.c
diff options
context:
space:
mode:
Diffstat (limited to 'sha1_name.c')
-rw-r--r--sha1_name.c18
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)