git-pull has historically accepted full fetchspecs, meaning that you could do git pull $repo A:B which would simultaneously fetch the remote branch A into the local branch B and merge B into HEAD. This got especially confusing if B was checked out. New users variously mistook pull for fetch or read that command as "merge the remote A into my B", neither of which is correct. Since the above usage should be very rare and can be done with separate calls to fetch and merge, we just disallow full fetchspecs in git-pull. Signed-off-by: Thomas Rast <trast@xxxxxxxxxxxxxxx> --- This actually came up on IRC *twice* this week. git-pull.sh | 19 +++++++++++++++++++ t/t5520-pull.sh | 12 ------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/git-pull.sh b/git-pull.sh index fc78592..8f06491 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -131,6 +131,25 @@ error_on_no_merge_candidates () { exit 1 } +check_full_fetchspec () { + shift # discard remote argument, if any + for arg in "$@" + do + case "$arg" in + *:*) + echo "$arg" + return + ;; + esac + done +} + +full_fetchspec=$(check_full_fetchspec "$@") +if test -n "$full_fetchspec" +then + die "full fetchspec '$full_fetchspec' not allowed" +fi + test true = "$rebase" && { if ! git rev-parse -q --verify HEAD >/dev/null then diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh index dd2ee84..a566a99 100755 --- a/t/t5520-pull.sh +++ b/t/t5520-pull.sh @@ -29,18 +29,6 @@ test_expect_success 'checking the results' ' diff file cloned/file ' -test_expect_success 'pulling into void using master:master' ' - mkdir cloned-uho && - ( - cd cloned-uho && - git init && - git pull .. master:master - ) && - test -f file && - test -f cloned-uho/file && - test_cmp file cloned-uho/file -' - test_expect_success 'test . as a remote' ' git branch copy master && -- 1.6.5.1.144.g40216 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html