fetch: convert get_ref_map to take a struct refspec

Convert 'get_ref_map()' to take a 'struct refspec' as a parameter instead of a list of 'struct refspec_item'. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Brandon Williams committed May 16, 2018 at 15:58 UTC 65d96c8b7dd78aad623d833c2c8dec625b8e00b6
1 file changed +20 -23
builtin/fetch.c
+20 -23
@@ -337,7 +337,7 @@ static void find_non_local_tags(struct transport *transport,
337 }
338
339 static struct ref *get_ref_map(struct transport *transport,
340 - struct refspec_item *refspecs, int refspec_count,
340 + struct refspec *rs,
341 int tags, int *autotags)
342 {
343 int i;
@@ -351,15 +351,16 @@ static struct ref *get_ref_map(struct transport *transport,
351
352 const struct ref *remote_refs;
353
354 - for (i = 0; i < refspec_count; i++) {
355 - if (!refspecs[i].exact_sha1) {
356 - const char *glob = strchr(refspecs[i].src, '*');
354 + for (i = 0; i < rs->nr; i++) {
355 + const struct refspec_item *item = &rs->items[i];
356 + if (!item->exact_sha1) {
357 + const char *glob = strchr(item->src, '*');
358 if (glob)
359 argv_array_pushf(&ref_prefixes, "%.*s",
359 - (int)(glob - refspecs[i].src),
360 - refspecs[i].src);
360 + (int)(glob - item->src),
361 + item->src);
362 else
362 - expand_ref_prefix(&ref_prefixes, refspecs[i].src);
363 + expand_ref_prefix(&ref_prefixes, item->src);
364 }
365 }
366
@@ -367,13 +368,12 @@ static struct ref *get_ref_map(struct transport *transport,
368
369 argv_array_clear(&ref_prefixes);
370
370 - if (refspec_count) {
371 - struct refspec_item *fetch_refspec;
372 - int fetch_refspec_nr;
371 + if (rs->nr) {
372 + struct refspec *fetch_refspec;
373
374 - for (i = 0; i < refspec_count; i++) {
375 - get_fetch_map(remote_refs, &refspecs[i], &tail, 0);
376 - if (refspecs[i].dst && refspecs[i].dst[0])
374 + for (i = 0; i < rs->nr; i++) {
375 + get_fetch_map(remote_refs, &rs->items[i], &tail, 0);
376 + if (rs->items[i].dst && rs->items[i].dst[0])
377 *autotags = 1;
378 }
379 /* Merge everything on the command line (but not --tags) */
@@ -400,16 +400,13 @@ static struct ref *get_ref_map(struct transport *transport,
400 * by ref_remove_duplicates() in favor of one of these
401 * opportunistic entries with FETCH_HEAD_IGNORE.
402 */
403 - if (refmap.nr) {
404 - fetch_refspec = refmap.items;
405 - fetch_refspec_nr = refmap.nr;
406 - } else {
407 - fetch_refspec = transport->remote->fetch.items;
408 - fetch_refspec_nr = transport->remote->fetch.nr;
409 - }
403 + if (refmap.nr)
404 + fetch_refspec = &refmap;
405 + else
406 + fetch_refspec = &transport->remote->fetch;
407
411 - for (i = 0; i < fetch_refspec_nr; i++)
412 - get_fetch_map(ref_map, &fetch_refspec[i], &oref_tail, 1);
408 + for (i = 0; i < fetch_refspec->nr; i++)
409 + get_fetch_map(ref_map, &fetch_refspec->items[i], &oref_tail, 1);
410 } else if (refmap.nr) {
411 die("--refmap option is only meaningful with command-line refspec(s).");
412 } else {
@@ -1136,7 +1133,7 @@ static int do_fetch(struct transport *transport,
1133 goto cleanup;
1134 }
1135
1139 - ref_map = get_ref_map(transport, rs->items, rs->nr, tags, &autotags);
1136 + ref_map = get_ref_map(transport, rs, tags, &autotags);
1137 if (!update_head_ok)
1138 check_not_current_branch(ref_map);
1139