[PATCH] pull: refuse complete src:dst fetchspec arguments
STALE3764d
From: Thomas Rast <hidden>
Date: 2016-06-15 22:47:35
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- 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