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>
This commit is contained in:
Junio C Hamano
2006-12-31 17:44:37 -08:00
parent 63c97ce228
commit fbc9012307

View File

@ -76,16 +76,32 @@ get_remote_default_refs_for_push () {
# from get_remote_refs_for_fetch when it deals with refspecs # from get_remote_refs_for_fetch when it deals with refspecs
# supplied on the command line. $ls_remote_result has the list # supplied on the command line. $ls_remote_result has the list
# of refs available at remote. # 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 () { expand_refs_wildcard () {
first_one=yes
for ref for ref
do do
lref=${ref#'+'} lref=${ref#'+'}
# a non glob pattern is given back as-is. # a non glob pattern is given back as-is.
expr "z$lref" : 'zrefs/.*/\*:refs/.*/\*$' >/dev/null || { expr "z$lref" : 'zrefs/.*/\*:refs/.*/\*$' >/dev/null || {
if test -n "$first_one"
then
echo "explicit"
first_one=
fi
echo "$ref" echo "$ref"
continue continue
} }
# glob
if test -n "$first_one"
then
echo "glob"
first_one=
fi
from=`expr "z$lref" : 'z\(refs/.*/\)\*:refs/.*/\*$'` from=`expr "z$lref" : 'z\(refs/.*/\)\*:refs/.*/\*$'`
to=`expr "z$lref" : 'zrefs/.*/\*:\(refs/.*/\)\*$'` to=`expr "z$lref" : 'zrefs/.*/\*:\(refs/.*/\)\*$'`
local_force= local_force=
@ -116,7 +132,8 @@ canon_refs_list_for_fetch () {
if test "$1" = "-d" if test "$1" = "-d"
then then
shift ; remote="$1" ; shift shift ; remote="$1" ; shift
set x $(expand_refs_wildcard "$@") set $(expand_refs_wildcard "$@")
is_explicit="$1"
shift shift
if test "$remote" = "$(get_default_remote)" if test "$remote" = "$(get_default_remote)"
then then
@ -125,6 +142,10 @@ canon_refs_list_for_fetch () {
merge_branches=$(git-repo-config \ merge_branches=$(git-repo-config \
--get-all "branch.${curr_branch}.merge") --get-all "branch.${curr_branch}.merge")
fi fi
if test -z "$merge_branches" && test $is_explicit != explicit
then
merge_branches=..this.will.never.match.any.ref..
fi
fi fi
for ref for ref
do do