diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-01-05 23:41:37 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-01-05 23:41:37 -0800 |
commit | 245d6d006408898613cdad35700d456e5d265722 (patch) | |
tree | e4b722a23316c8210d74d8ad0c0b7003f8be3408 /remote.c | |
parent | 9a2c83d24cb547c49e320d2498863b0ef297acd4 (diff) | |
parent | f8fb971eace6ed6fb0f350ade8af6fdd3599272d (diff) | |
download | git-245d6d006408898613cdad35700d456e5d265722.tar.gz |
Merge branch 'jc/fetch-ignore-symref'
Avoid false error from an attempt to update local symbolic ref via
fetch.
* jc/fetch-ignore-symref:
fetch: ignore wildcarded refspecs that update local symbolic refs
Diffstat (limited to 'remote.c')
-rw-r--r-- | remote.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -1413,6 +1413,16 @@ int branch_merge_matches(struct branch *branch, return refname_match(branch->merge[i]->src, refname, ref_fetch_rules); } +static int ignore_symref_update(const char *refname) +{ + unsigned char sha1[20]; + int flag; + + if (!resolve_ref_unsafe(refname, sha1, 0, &flag)) + return 0; /* non-existing refs are OK */ + return (flag & REF_ISSYMREF); +} + static struct ref *get_expanded_map(const struct ref *remote_refs, const struct refspec *refspec) { @@ -1426,7 +1436,8 @@ static struct ref *get_expanded_map(const struct ref *remote_refs, if (strchr(ref->name, '^')) continue; /* a dereference item */ if (match_name_with_pattern(refspec->src, ref->name, - refspec->dst, &expn_name)) { + refspec->dst, &expn_name) && + !ignore_symref_update(expn_name)) { struct ref *cpy = copy_ref(ref); cpy->peer_ref = alloc_ref(expn_name); |