From fbc9012307d3b2e1bcee84e4455b11e97f580e07 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 31 Dec 2006 17:44:37 -0800 Subject: [PATCH] Do not merge random set of refs out of wildcarded refs When your fetch configuration has only the wildcards, we would pick the lexicographically first ref from the remote side for merging, which was complete nonsense. Make sure nothing except the one that is specified with branch.*.merge is merged in this case. Signed-off-by: Junio C Hamano --- git-parse-remote.sh | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/git-parse-remote.sh b/git-parse-remote.sh index 144f170155..d2e4c2b9ae 100755 --- a/git-parse-remote.sh +++ b/git-parse-remote.sh @@ -76,16 +76,32 @@ get_remote_default_refs_for_push () { # from get_remote_refs_for_fetch when it deals with refspecs # supplied on the command line. $ls_remote_result has the list # of refs available at remote. +# +# The first token returned is either "explicit" or "glob"; this +# is to help prevent randomly "globbed" ref from being chosen as +# a merge candidate expand_refs_wildcard () { + first_one=yes for ref do lref=${ref#'+'} # a non glob pattern is given back as-is. expr "z$lref" : 'zrefs/.*/\*:refs/.*/\*$' >/dev/null || { + if test -n "$first_one" + then + echo "explicit" + first_one= + fi echo "$ref" continue } + # glob + if test -n "$first_one" + then + echo "glob" + first_one= + fi from=`expr "z$lref" : 'z\(refs/.*/\)\*:refs/.*/\*$'` to=`expr "z$lref" : 'zrefs/.*/\*:\(refs/.*/\)\*$'` local_force= @@ -116,7 +132,8 @@ canon_refs_list_for_fetch () { if test "$1" = "-d" then shift ; remote="$1" ; shift - set x $(expand_refs_wildcard "$@") + set $(expand_refs_wildcard "$@") + is_explicit="$1" shift if test "$remote" = "$(get_default_remote)" then @@ -125,6 +142,10 @@ canon_refs_list_for_fetch () { merge_branches=$(git-repo-config \ --get-all "branch.${curr_branch}.merge") fi + if test -z "$merge_branches" && test $is_explicit != explicit + then + merge_branches=..this.will.never.match.any.ref.. + fi fi for ref do -- 2.11.4.GIT