Skip to content

Commit c6b3824

Browse files
committed
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
2 parents a7652bf + 459e54b commit c6b3824

File tree

6 files changed

+40
-27
lines changed

6 files changed

+40
-27
lines changed

builtin/fetch.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ static struct ref *get_ref_map(struct remote *remote,
586586
struct refspec_item tag_refspec;
587587

588588
/* also fetch all tags */
589-
refspec_item_init(&tag_refspec, TAG_REFSPEC, 0);
589+
refspec_item_init_push(&tag_refspec, TAG_REFSPEC);
590590
get_fetch_map(remote_refs, &tag_refspec, &tail, 0);
591591
refspec_item_clear(&tag_refspec);
592592
} else if (tags == TAGS_DEFAULT && *autotags) {

builtin/pull.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,8 @@ static const char *get_tracking_branch(const char *remote, const char *refspec)
738738
const char *spec_src;
739739
const char *merge_branch;
740740

741-
refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH);
741+
if (!refspec_item_init_fetch(&spec, refspec))
742+
die(_("invalid refspec '%s'"), refspec);
742743
spec_src = spec.src;
743744
if (!*spec_src || !strcmp(spec_src, "HEAD"))
744745
spec_src = "HEAD";

refspec.c

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,18 +153,22 @@ static int parse_refspec(struct refspec_item *item, const char *refspec, int fet
153153
return 1;
154154
}
155155

156-
int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch)
156+
static int refspec_item_init(struct refspec_item *item, const char *refspec,
157+
int fetch)
157158
{
158159
memset(item, 0, sizeof(*item));
159160
item->raw = xstrdup(refspec);
160161
return parse_refspec(item, refspec, fetch);
161162
}
162163

163-
void refspec_item_init_or_die(struct refspec_item *item, const char *refspec,
164-
int fetch)
164+
int refspec_item_init_fetch(struct refspec_item *item, const char *refspec)
165165
{
166-
if (!refspec_item_init(item, refspec, fetch))
167-
die(_("invalid refspec '%s'"), refspec);
166+
return refspec_item_init(item, refspec, 1);
167+
}
168+
169+
int refspec_item_init_push(struct refspec_item *item, const char *refspec)
170+
{
171+
return refspec_item_init(item, refspec, 0);
168172
}
169173

170174
void refspec_item_clear(struct refspec_item *item)
@@ -178,17 +182,29 @@ void refspec_item_clear(struct refspec_item *item)
178182
item->exact_sha1 = 0;
179183
}
180184

181-
void refspec_init(struct refspec *rs, int fetch)
185+
void refspec_init_fetch(struct refspec *rs)
186+
{
187+
struct refspec blank = REFSPEC_INIT_FETCH;
188+
memcpy(rs, &blank, sizeof(*rs));
189+
}
190+
191+
void refspec_init_push(struct refspec *rs)
182192
{
183-
memset(rs, 0, sizeof(*rs));
184-
rs->fetch = fetch;
193+
struct refspec blank = REFSPEC_INIT_PUSH;
194+
memcpy(rs, &blank, sizeof(*rs));
185195
}
186196

187197
void refspec_append(struct refspec *rs, const char *refspec)
188198
{
189199
struct refspec_item item;
200+
int ret;
190201

191-
refspec_item_init_or_die(&item, refspec, rs->fetch);
202+
if (rs->fetch)
203+
ret = refspec_item_init_fetch(&item, refspec);
204+
else
205+
ret = refspec_item_init_push(&item, refspec);
206+
if (!ret)
207+
die(_("invalid refspec '%s'"), refspec);
192208

193209
ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc);
194210
rs->items[rs->nr] = item;
@@ -233,7 +249,7 @@ void refspec_clear(struct refspec *rs)
233249
int valid_fetch_refspec(const char *fetch_refspec_str)
234250
{
235251
struct refspec_item refspec;
236-
int ret = refspec_item_init(&refspec, fetch_refspec_str, REFSPEC_FETCH);
252+
int ret = refspec_item_init_fetch(&refspec, fetch_refspec_str);
237253
refspec_item_clear(&refspec);
238254
return ret;
239255
}
@@ -249,7 +265,7 @@ void refspec_ref_prefixes(const struct refspec *rs,
249265
if (item->negative)
250266
continue;
251267

252-
if (rs->fetch == REFSPEC_FETCH) {
268+
if (rs->fetch) {
253269
if (item->exact_sha1)
254270
continue;
255271
prefix = item->src;

refspec.h

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,8 @@ struct refspec_item {
3232

3333
struct string_list;
3434

35-
#define REFSPEC_FETCH 1
36-
#define REFSPEC_PUSH 0
37-
38-
#define REFSPEC_INIT_FETCH { .fetch = REFSPEC_FETCH }
39-
#define REFSPEC_INIT_PUSH { .fetch = REFSPEC_PUSH }
35+
#define REFSPEC_INIT_FETCH { .fetch = 1 }
36+
#define REFSPEC_INIT_PUSH { .fetch = 0 }
4037

4138
/**
4239
* An array of strings can be parsed into a struct refspec using
@@ -47,15 +44,14 @@ struct refspec {
4744
int alloc;
4845
int nr;
4946

50-
int fetch;
47+
unsigned fetch : 1;
5148
};
5249

53-
int refspec_item_init(struct refspec_item *item, const char *refspec,
54-
int fetch);
55-
void refspec_item_init_or_die(struct refspec_item *item, const char *refspec,
56-
int fetch);
50+
int refspec_item_init_fetch(struct refspec_item *item, const char *refspec);
51+
int refspec_item_init_push(struct refspec_item *item, const char *refspec);
5752
void refspec_item_clear(struct refspec_item *item);
58-
void refspec_init(struct refspec *rs, int fetch);
53+
void refspec_init_fetch(struct refspec *rs);
54+
void refspec_init_push(struct refspec *rs);
5955
void refspec_append(struct refspec *rs, const char *refspec);
6056
__attribute__((format (printf,2,3)))
6157
void refspec_appendf(struct refspec *rs, const char *fmt, ...);

remote.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ static struct remote *make_remote(struct remote_state *remote_state,
143143
ret->prune = -1; /* unspecified */
144144
ret->prune_tags = -1; /* unspecified */
145145
ret->name = xstrndup(name, len);
146-
refspec_init(&ret->push, REFSPEC_PUSH);
147-
refspec_init(&ret->fetch, REFSPEC_FETCH);
146+
refspec_init_push(&ret->push);
147+
refspec_init_fetch(&ret->fetch);
148148
string_list_init_dup(&ret->server_options);
149149

150150
ALLOC_GROW(remote_state->remotes, remote_state->remotes_nr + 1,

transport-helper.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ static struct child_process *get_helper(struct transport *transport)
162162

163163
data->helper = helper;
164164
data->no_disconnect_req = 0;
165-
refspec_init(&data->rs, REFSPEC_FETCH);
165+
refspec_init_fetch(&data->rs);
166166

167167
/*
168168
* Open the output as FILE* so strbuf_getline_*() family of

0 commit comments

Comments
 (0)