remote: read symbolic refs via refs_read_symbolic_ref()
We have two cases in the remote code where we check whether a reference is symbolic or not, but don't mind in case it doesn't exist or in case it exists but is a non-symbolic reference. Convert these two callsites to use the new `refs_read_symbolic_ref()` function, whose intent is to implement exactly that usecase. No change in behaviour is expected from this change. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
cd475b3b03
commit
1553f5e76c
@ -766,13 +766,15 @@ static int mv(int argc, const char **argv)
|
|||||||
for_each_ref(read_remote_branches, &rename);
|
for_each_ref(read_remote_branches, &rename);
|
||||||
for (i = 0; i < remote_branches.nr; i++) {
|
for (i = 0; i < remote_branches.nr; i++) {
|
||||||
struct string_list_item *item = remote_branches.items + i;
|
struct string_list_item *item = remote_branches.items + i;
|
||||||
int flag = 0;
|
struct strbuf referent = STRBUF_INIT;
|
||||||
|
|
||||||
read_ref_full(item->string, RESOLVE_REF_READING, NULL, &flag);
|
if (refs_read_symbolic_ref(get_main_ref_store(the_repository), item->string,
|
||||||
if (!(flag & REF_ISSYMREF))
|
&referent))
|
||||||
continue;
|
continue;
|
||||||
if (delete_ref(NULL, item->string, NULL, REF_NO_DEREF))
|
if (delete_ref(NULL, item->string, NULL, REF_NO_DEREF))
|
||||||
die(_("deleting '%s' failed"), item->string);
|
die(_("deleting '%s' failed"), item->string);
|
||||||
|
|
||||||
|
strbuf_release(&referent);
|
||||||
}
|
}
|
||||||
for (i = 0; i < remote_branches.nr; i++) {
|
for (i = 0; i < remote_branches.nr; i++) {
|
||||||
struct string_list_item *item = remote_branches.items + i;
|
struct string_list_item *item = remote_branches.items + i;
|
||||||
|
14
remote.c
14
remote.c
@ -1945,13 +1945,9 @@ const char *branch_get_push(struct branch *branch, struct strbuf *err)
|
|||||||
return branch->push_tracking_ref;
|
return branch->push_tracking_ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ignore_symref_update(const char *refname)
|
static int ignore_symref_update(const char *refname, struct strbuf *scratch)
|
||||||
{
|
{
|
||||||
int flag;
|
return !refs_read_symbolic_ref(get_main_ref_store(the_repository), refname, scratch);
|
||||||
|
|
||||||
if (!resolve_ref_unsafe(refname, 0, NULL, &flag))
|
|
||||||
return 0; /* non-existing refs are OK */
|
|
||||||
return (flag & REF_ISSYMREF);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1964,6 +1960,7 @@ static int ignore_symref_update(const char *refname)
|
|||||||
static struct ref *get_expanded_map(const struct ref *remote_refs,
|
static struct ref *get_expanded_map(const struct ref *remote_refs,
|
||||||
const struct refspec_item *refspec)
|
const struct refspec_item *refspec)
|
||||||
{
|
{
|
||||||
|
struct strbuf scratch = STRBUF_INIT;
|
||||||
const struct ref *ref;
|
const struct ref *ref;
|
||||||
struct ref *ret = NULL;
|
struct ref *ret = NULL;
|
||||||
struct ref **tail = &ret;
|
struct ref **tail = &ret;
|
||||||
@ -1971,11 +1968,13 @@ static struct ref *get_expanded_map(const struct ref *remote_refs,
|
|||||||
for (ref = remote_refs; ref; ref = ref->next) {
|
for (ref = remote_refs; ref; ref = ref->next) {
|
||||||
char *expn_name = NULL;
|
char *expn_name = NULL;
|
||||||
|
|
||||||
|
strbuf_reset(&scratch);
|
||||||
|
|
||||||
if (strchr(ref->name, '^'))
|
if (strchr(ref->name, '^'))
|
||||||
continue; /* a dereference item */
|
continue; /* a dereference item */
|
||||||
if (match_name_with_pattern(refspec->src, ref->name,
|
if (match_name_with_pattern(refspec->src, ref->name,
|
||||||
refspec->dst, &expn_name) &&
|
refspec->dst, &expn_name) &&
|
||||||
!ignore_symref_update(expn_name)) {
|
!ignore_symref_update(expn_name, &scratch)) {
|
||||||
struct ref *cpy = copy_ref(ref);
|
struct ref *cpy = copy_ref(ref);
|
||||||
|
|
||||||
cpy->peer_ref = alloc_ref(expn_name);
|
cpy->peer_ref = alloc_ref(expn_name);
|
||||||
@ -1987,6 +1986,7 @@ static struct ref *get_expanded_map(const struct ref *remote_refs,
|
|||||||
free(expn_name);
|
free(expn_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strbuf_release(&scratch);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user