]> git.ipfire.org Git - thirdparty/git.git/blobdiff - remote.c
Merge branch 'gc/branch-recurse-submodules-fix'
[thirdparty/git.git] / remote.c
index c97c626eaa83908408848733d2db32cbbe097931..42a4e7106e1255af5b79d32ff7d86170827582b1 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -1945,13 +1945,9 @@ const char *branch_get_push(struct branch *branch, struct strbuf *err)
        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;
-
-       if (!resolve_ref_unsafe(refname, 0, NULL, &flag))
-               return 0; /* non-existing refs are OK */
-       return (flag & REF_ISSYMREF);
+       return !refs_read_symbolic_ref(get_main_ref_store(the_repository), refname, scratch);
 }
 
 /*
@@ -1964,6 +1960,7 @@ static int ignore_symref_update(const char *refname)
 static struct ref *get_expanded_map(const struct ref *remote_refs,
                                    const struct refspec_item *refspec)
 {
+       struct strbuf scratch = STRBUF_INIT;
        const struct ref *ref;
        struct ref *ret = NULL;
        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) {
                char *expn_name = NULL;
 
+               strbuf_reset(&scratch);
+
                if (strchr(ref->name, '^'))
                        continue; /* a dereference item */
                if (match_name_with_pattern(refspec->src, ref->name,
                                            refspec->dst, &expn_name) &&
-                   !ignore_symref_update(expn_name)) {
+                   !ignore_symref_update(expn_name, &scratch)) {
                        struct ref *cpy = copy_ref(ref);
 
                        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);
        }
 
+       strbuf_release(&scratch);
        return ret;
 }