summaryrefslogtreecommitdiff
path: root/t/t5529-push-errors.sh
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2014-03-05 19:04:54 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-03-05 21:23:27 (GMT)
commitba928c13d75172799f5f06f922e5c2f3232cf114 (patch)
treefd6e79fcdab6544f2b565a2a199df2ff30cca962 /t/t5529-push-errors.sh
parent471fd3fe410ad95ef11270a865203482ce4bca7d (diff)
downloadgit-ba928c13d75172799f5f06f922e5c2f3232cf114.zip
git-ba928c13d75172799f5f06f922e5c2f3232cf114.tar.gz
git-ba928c13d75172799f5f06f922e5c2f3232cf114.tar.bz2
push: detect local refspec errors early
When pushing, we do not even look at our push refspecs until after we have made contact with the remote receive-pack and gotten its list of refs. This means that we may go to some work, including asking the user to log in, before realizing we have simple errors like "git push origin matser". We cannot catch all refspec problems, since fully evaluating the refspecs requires knowing what the remote side has. But we can do a quick sanity check of the local side and catch a few simple error cases. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t5529-push-errors.sh')
-rwxr-xr-xt/t5529-push-errors.sh48
1 files changed, 48 insertions, 0 deletions
diff --git a/t/t5529-push-errors.sh b/t/t5529-push-errors.sh
new file mode 100755
index 0000000..9871307
--- /dev/null
+++ b/t/t5529-push-errors.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+test_description='detect some push errors early (before contacting remote)'
+. ./test-lib.sh
+
+test_expect_success 'setup commits' '
+ test_commit one
+'
+
+test_expect_success 'setup remote' '
+ git init --bare remote.git &&
+ git remote add origin remote.git
+'
+
+test_expect_success 'setup fake receive-pack' '
+ FAKE_RP_ROOT=$(pwd) &&
+ export FAKE_RP_ROOT &&
+ write_script fake-rp <<-\EOF &&
+ echo yes >"$FAKE_RP_ROOT"/rp-ran
+ exit 1
+ EOF
+ git config remote.origin.receivepack "\"\$FAKE_RP_ROOT/fake-rp\""
+'
+
+test_expect_success 'detect missing branches early' '
+ echo no >rp-ran &&
+ echo no >expect &&
+ test_must_fail git push origin missing &&
+ test_cmp expect rp-ran
+'
+
+test_expect_success 'detect missing sha1 expressions early' '
+ echo no >rp-ran &&
+ echo no >expect &&
+ test_must_fail git push origin master~2:master &&
+ test_cmp expect rp-ran
+'
+
+test_expect_success 'detect ambiguous refs early' '
+ git branch foo &&
+ git tag foo &&
+ echo no >rp-ran &&
+ echo no >expect &&
+ test_must_fail git push origin foo &&
+ test_cmp expect rp-ran
+'
+
+test_done