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:
@ -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
|
||||||
|
Reference in New Issue
Block a user