diff options
author | Junio C Hamano <junkio@cox.net> | 2006-12-31 17:44:37 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-12-31 18:53:26 -0800 |
commit | fbc9012307d3b2e1bcee84e4455b11e97f580e07 (patch) | |
tree | 261cc2bad5923a5fc91d627f34afc18c999073bc | |
parent | 63c97ce228f2d2697a8ed954a9592dfb5f286338 (diff) | |
download | git-fbc9012307d3b2e1bcee84e4455b11e97f580e07.tar.gz git-fbc9012307d3b2e1bcee84e4455b11e97f580e07.tar.xz |
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 <junkio@cox.net>
-rwxr-xr-x | git-parse-remote.sh | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/git-parse-remote.sh b/git-parse-remote.sh index 144f17015..d2e4c2b9a 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 |