Merge branch 'tb/refspec-fetch-cleanup'

Code clean-up.

* tb/refspec-fetch-cleanup:
  refspec: replace `refspec_item_init()` with fetch/push variants
  refspec: remove refspec_item_init_or_die()
  refspec: replace `refspec_init()` with fetch/push variants
  refspec: treat 'fetch' as a Boolean value
This commit is contained in:
Junio C Hamano
2025-04-08 11:43:13 -07:00
6 changed files with 40 additions and 27 deletions

View File

@@ -586,7 +586,7 @@ static struct ref *get_ref_map(struct remote *remote,
struct refspec_item tag_refspec; struct refspec_item tag_refspec;
/* also fetch all tags */ /* also fetch all tags */
refspec_item_init(&tag_refspec, TAG_REFSPEC, 0); refspec_item_init_push(&tag_refspec, TAG_REFSPEC);
get_fetch_map(remote_refs, &tag_refspec, &tail, 0); get_fetch_map(remote_refs, &tag_refspec, &tail, 0);
refspec_item_clear(&tag_refspec); refspec_item_clear(&tag_refspec);
} else if (tags == TAGS_DEFAULT && *autotags) { } else if (tags == TAGS_DEFAULT && *autotags) {

View File

@@ -738,7 +738,8 @@ static const char *get_tracking_branch(const char *remote, const char *refspec)
const char *spec_src; const char *spec_src;
const char *merge_branch; const char *merge_branch;
refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH); if (!refspec_item_init_fetch(&spec, refspec))
die(_("invalid refspec '%s'"), refspec);
spec_src = spec.src; spec_src = spec.src;
if (!*spec_src || !strcmp(spec_src, "HEAD")) if (!*spec_src || !strcmp(spec_src, "HEAD"))
spec_src = "HEAD"; spec_src = "HEAD";

View File

@@ -153,18 +153,22 @@ static int parse_refspec(struct refspec_item *item, const char *refspec, int fet
return 1; return 1;
} }
int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch) static int refspec_item_init(struct refspec_item *item, const char *refspec,
int fetch)
{ {
memset(item, 0, sizeof(*item)); memset(item, 0, sizeof(*item));
item->raw = xstrdup(refspec); item->raw = xstrdup(refspec);
return parse_refspec(item, refspec, fetch); return parse_refspec(item, refspec, fetch);
} }
void refspec_item_init_or_die(struct refspec_item *item, const char *refspec, int refspec_item_init_fetch(struct refspec_item *item, const char *refspec)
int fetch)
{ {
if (!refspec_item_init(item, refspec, fetch)) return refspec_item_init(item, refspec, 1);
die(_("invalid refspec '%s'"), refspec); }
int refspec_item_init_push(struct refspec_item *item, const char *refspec)
{
return refspec_item_init(item, refspec, 0);
} }
void refspec_item_clear(struct refspec_item *item) void refspec_item_clear(struct refspec_item *item)
@@ -178,17 +182,29 @@ void refspec_item_clear(struct refspec_item *item)
item->exact_sha1 = 0; item->exact_sha1 = 0;
} }
void refspec_init(struct refspec *rs, int fetch) void refspec_init_fetch(struct refspec *rs)
{ {
memset(rs, 0, sizeof(*rs)); struct refspec blank = REFSPEC_INIT_FETCH;
rs->fetch = fetch; memcpy(rs, &blank, sizeof(*rs));
}
void refspec_init_push(struct refspec *rs)
{
struct refspec blank = REFSPEC_INIT_PUSH;
memcpy(rs, &blank, sizeof(*rs));
} }
void refspec_append(struct refspec *rs, const char *refspec) void refspec_append(struct refspec *rs, const char *refspec)
{ {
struct refspec_item item; struct refspec_item item;
int ret;
refspec_item_init_or_die(&item, refspec, rs->fetch); if (rs->fetch)
ret = refspec_item_init_fetch(&item, refspec);
else
ret = refspec_item_init_push(&item, refspec);
if (!ret)
die(_("invalid refspec '%s'"), refspec);
ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc); ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc);
rs->items[rs->nr] = item; rs->items[rs->nr] = item;
@@ -233,7 +249,7 @@ void refspec_clear(struct refspec *rs)
int valid_fetch_refspec(const char *fetch_refspec_str) int valid_fetch_refspec(const char *fetch_refspec_str)
{ {
struct refspec_item refspec; struct refspec_item refspec;
int ret = refspec_item_init(&refspec, fetch_refspec_str, REFSPEC_FETCH); int ret = refspec_item_init_fetch(&refspec, fetch_refspec_str);
refspec_item_clear(&refspec); refspec_item_clear(&refspec);
return ret; return ret;
} }
@@ -249,7 +265,7 @@ void refspec_ref_prefixes(const struct refspec *rs,
if (item->negative) if (item->negative)
continue; continue;
if (rs->fetch == REFSPEC_FETCH) { if (rs->fetch) {
if (item->exact_sha1) if (item->exact_sha1)
continue; continue;
prefix = item->src; prefix = item->src;

View File

@@ -32,11 +32,8 @@ struct refspec_item {
struct string_list; struct string_list;
#define REFSPEC_FETCH 1 #define REFSPEC_INIT_FETCH { .fetch = 1 }
#define REFSPEC_PUSH 0 #define REFSPEC_INIT_PUSH { .fetch = 0 }
#define REFSPEC_INIT_FETCH { .fetch = REFSPEC_FETCH }
#define REFSPEC_INIT_PUSH { .fetch = REFSPEC_PUSH }
/** /**
* An array of strings can be parsed into a struct refspec using * An array of strings can be parsed into a struct refspec using
@@ -47,15 +44,14 @@ struct refspec {
int alloc; int alloc;
int nr; int nr;
int fetch; unsigned fetch : 1;
}; };
int refspec_item_init(struct refspec_item *item, const char *refspec, int refspec_item_init_fetch(struct refspec_item *item, const char *refspec);
int fetch); int refspec_item_init_push(struct refspec_item *item, const char *refspec);
void refspec_item_init_or_die(struct refspec_item *item, const char *refspec,
int fetch);
void refspec_item_clear(struct refspec_item *item); void refspec_item_clear(struct refspec_item *item);
void refspec_init(struct refspec *rs, int fetch); void refspec_init_fetch(struct refspec *rs);
void refspec_init_push(struct refspec *rs);
void refspec_append(struct refspec *rs, const char *refspec); void refspec_append(struct refspec *rs, const char *refspec);
__attribute__((format (printf,2,3))) __attribute__((format (printf,2,3)))
void refspec_appendf(struct refspec *rs, const char *fmt, ...); void refspec_appendf(struct refspec *rs, const char *fmt, ...);

View File

@@ -143,8 +143,8 @@ static struct remote *make_remote(struct remote_state *remote_state,
ret->prune = -1; /* unspecified */ ret->prune = -1; /* unspecified */
ret->prune_tags = -1; /* unspecified */ ret->prune_tags = -1; /* unspecified */
ret->name = xstrndup(name, len); ret->name = xstrndup(name, len);
refspec_init(&ret->push, REFSPEC_PUSH); refspec_init_push(&ret->push);
refspec_init(&ret->fetch, REFSPEC_FETCH); refspec_init_fetch(&ret->fetch);
string_list_init_dup(&ret->server_options); string_list_init_dup(&ret->server_options);
ALLOC_GROW(remote_state->remotes, remote_state->remotes_nr + 1, ALLOC_GROW(remote_state->remotes, remote_state->remotes_nr + 1,

View File

@@ -162,7 +162,7 @@ static struct child_process *get_helper(struct transport *transport)
data->helper = helper; data->helper = helper;
data->no_disconnect_req = 0; data->no_disconnect_req = 0;
refspec_init(&data->rs, REFSPEC_FETCH); refspec_init_fetch(&data->rs);
/* /*
* Open the output as FILE* so strbuf_getline_*() family of * Open the output as FILE* so strbuf_getline_*() family of