summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Tan <pyokagan@gmail.com>2015-05-02 23:37:10 +0800
committerJunio C Hamano <gitster@pobox.com>2015-05-03 11:15:00 -0700
commitc527a44d011df398ad513857aa2b529eabe9332a (patch)
treeed543f89190938c18e3592a58c3c6ad98a6e458c
parentd4c07f652c0cbf00fb79d7f080f9e73b3d38bfe7 (diff)
downloadgit-c527a44d011df398ad513857aa2b529eabe9332a.tar.gz
t5520: implement tests for no merge candidates cases
Commit a8c9bef4 fully established the current advices given by git-pull for the different cases where git-fetch will not have anything marked for merge: 1. We're not on a branch, so there is no branch configuration. 2. We're on a branch, but there is no configuration for this branch. 3. We fetched from the configured remote, but the configured branch to merge didn't get fetched (either it doesn't exist, or wasn't part of the fetch refspec). 4. We fetched from the non-default remote, but didn't specify a branch to merge. We can't use the configured one because it applies to the default remote. 5. We fetched from a specified remote, and a refspec was given, but it ended up not fetching anything. Implement tests for the above 5 cases to ensure that the correct code paths are triggered for each of these cases. Signed-off-by: Paul Tan <pyokagan@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xt/t5520-pull.sh52
1 files changed, 52 insertions, 0 deletions
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index 01ae1bf4f0..635ec02f6a 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -122,6 +122,58 @@ test_expect_success 'the default remote . should not break explicit pull' '
test `cat file` = modified
'
+test_expect_success 'fail if not on a branch' '
+ cp .git/config .git/config.bak &&
+ test_when_finished "cp .git/config.bak .git/config" &&
+ git remote add test_remote . &&
+ git checkout HEAD^{} &&
+ test_when_finished "git checkout -f copy" &&
+ cat >>.git/config <<-\EOF &&
+ [branch ""]
+ remote = test_remote
+ EOF
+ test_must_fail git pull test_remote 2>out &&
+ test_i18ngrep "You are not currently on a branch" out
+'
+
+test_expect_success 'fail if no configuration for current branch' '
+ git remote add test_remote . &&
+ test_when_finished "git remote remove test_remote" &&
+ git checkout -b test copy &&
+ test_when_finished "git checkout -f copy && git branch -D test" &&
+ test_config branch.test.remote test_remote &&
+ test_must_fail git pull 2>out &&
+ test_i18ngrep "There is no tracking information" out
+'
+
+test_expect_success 'fail if upstream branch does not exist' "
+ git checkout -b test copy &&
+ test_when_finished 'git checkout -f copy && git branch -D test' &&
+ test_config branch.test.remote . &&
+ test_config branch.test.merge refs/heads/nonexisting &&
+ test_must_fail git pull 2>out &&
+ test_i18ngrep \"Your configuration specifies to merge with the ref 'nonexisting'\" out
+"
+
+test_expect_success 'fail if no branches specified with non-default remote' '
+ git clone --bare . test_repo &&
+ test_when_finished "rm -rf test_repo" &&
+ git remote add test_remote test_repo &&
+ test_when_finished "git remote remove test_remote" &&
+ git checkout -b test master &&
+ test_when_finished "git checkout -f master && git branch -D test" &&
+ test_config branch.test.remote . &&
+ test_must_fail git pull test_remote 2>out &&
+ test_i18ngrep "you must specify a branch on the command line" out
+'
+
+test_expect_success 'fail if wildcard spec does not match any refs' "
+ git checkout -b test copy &&
+ test_when_finished 'git checkout -f copy && git branch -D test' &&
+ test_must_fail git pull . 'refs/nonexisting1/*:refs/nonexisting2/*' 2>out &&
+ test_i18ngrep 'There are no candidates for merging' out
+"
+
test_expect_success '--rebase' '
git branch to-rebase &&
echo modified again > file &&