}
static struct ref *get_ref_map(struct transport *transport,
- struct refspec_item *refspecs, int refspec_count,
+ struct refspec *rs,
int tags, int *autotags)
{
int i;
const struct ref *remote_refs;
- for (i = 0; i < refspec_count; i++) {
- if (!refspecs[i].exact_sha1) {
- const char *glob = strchr(refspecs[i].src, '*');
+ for (i = 0; i < rs->nr; i++) {
+ const struct refspec_item *item = &rs->items[i];
+ if (!item->exact_sha1) {
+ const char *glob = strchr(item->src, '*');
if (glob)
argv_array_pushf(&ref_prefixes, "%.*s",
- (int)(glob - refspecs[i].src),
- refspecs[i].src);
+ (int)(glob - item->src),
+ item->src);
else
- expand_ref_prefix(&ref_prefixes, refspecs[i].src);
+ expand_ref_prefix(&ref_prefixes, item->src);
}
}
argv_array_clear(&ref_prefixes);
- if (refspec_count) {
- struct refspec_item *fetch_refspec;
- int fetch_refspec_nr;
+ if (rs->nr) {
+ struct refspec *fetch_refspec;
- for (i = 0; i < refspec_count; i++) {
- get_fetch_map(remote_refs, &refspecs[i], &tail, 0);
- if (refspecs[i].dst && refspecs[i].dst[0])
+ for (i = 0; i < rs->nr; i++) {
+ get_fetch_map(remote_refs, &rs->items[i], &tail, 0);
+ if (rs->items[i].dst && rs->items[i].dst[0])
*autotags = 1;
}
/* Merge everything on the command line (but not --tags) */
* by ref_remove_duplicates() in favor of one of these
* opportunistic entries with FETCH_HEAD_IGNORE.
*/
- if (refmap.nr) {
- fetch_refspec = refmap.items;
- fetch_refspec_nr = refmap.nr;
- } else {
- fetch_refspec = transport->remote->fetch.items;
- fetch_refspec_nr = transport->remote->fetch.nr;
- }
+ if (refmap.nr)
+ fetch_refspec = &refmap;
+ else
+ fetch_refspec = &transport->remote->fetch;
- for (i = 0; i < fetch_refspec_nr; i++)
- get_fetch_map(ref_map, &fetch_refspec[i], &oref_tail, 1);
+ for (i = 0; i < fetch_refspec->nr; i++)
+ get_fetch_map(ref_map, &fetch_refspec->items[i], &oref_tail, 1);
} else if (refmap.nr) {
die("--refmap option is only meaningful with command-line refspec(s).");
} else {
return ret;
}
-static int prune_refs(struct refspec_item *refs, int ref_count, struct ref *ref_map,
- const char *raw_url)
+static int prune_refs(struct refspec *rs, struct ref *ref_map,
+ const char *raw_url)
{
int url_len, i, result = 0;
- struct ref *ref, *stale_refs = get_stale_heads(refs, ref_count, ref_map);
+ struct ref *ref, *stale_refs = get_stale_heads(rs->items, rs->nr, ref_map);
char *url;
int summary_width = transport_summary_width(stale_refs);
const char *dangling_msg = dry_run
goto cleanup;
}
- ref_map = get_ref_map(transport, rs->items, rs->nr, tags, &autotags);
+ ref_map = get_ref_map(transport, rs, tags, &autotags);
if (!update_head_ok)
check_not_current_branch(ref_map);
* don't care whether --tags was specified.
*/
if (rs->nr) {
- prune_refs(rs->items, rs->nr, ref_map, transport->url);
+ prune_refs(rs, ref_map, transport->url);
} else {
- prune_refs(transport->remote->fetch.items,
- transport->remote->fetch.nr,
+ prune_refs(&transport->remote->fetch,
ref_map,
transport->url);
}