test prerequisites: enumerate with commas
[gitweb.git] / t / t5520-pull.sh
index dd24b0cdbbdda50997ec0cacdf569cae7fa2c613..227d29335020f3e52a40b03b2f933f4d63942b91 100755 (executable)
@@ -125,8 +125,7 @@ test_expect_success '--rebase' '
 '
 test_expect_success 'pull.rebase' '
        git reset --hard before-rebase &&
-       git config --bool pull.rebase true &&
-       test_when_finished "git config --unset pull.rebase" &&
+       test_config pull.rebase true &&
        git pull . copy &&
        test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
        test new = $(git show HEAD:file2)
@@ -134,8 +133,7 @@ test_expect_success 'pull.rebase' '
 
 test_expect_success 'branch.to-rebase.rebase' '
        git reset --hard before-rebase &&
-       git config --bool branch.to-rebase.rebase true &&
-       test_when_finished "git config --unset branch.to-rebase.rebase" &&
+       test_config branch.to-rebase.rebase true &&
        git pull . copy &&
        test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
        test new = $(git show HEAD:file2)
@@ -143,15 +141,102 @@ test_expect_success 'branch.to-rebase.rebase' '
 
 test_expect_success 'branch.to-rebase.rebase should override pull.rebase' '
        git reset --hard before-rebase &&
-       git config --bool pull.rebase true &&
-       test_when_finished "git config --unset pull.rebase" &&
-       git config --bool branch.to-rebase.rebase false &&
-       test_when_finished "git config --unset branch.to-rebase.rebase" &&
+       test_config pull.rebase true &&
+       test_config branch.to-rebase.rebase false &&
        git pull . copy &&
        test $(git rev-parse HEAD^) != $(git rev-parse copy) &&
        test new = $(git show HEAD:file2)
 '
 
+# add a feature branch, keep-merge, that is merged into master, so the
+# test can try preserving the merge commit (or not) with various
+# --rebase flags/pull.rebase settings.
+test_expect_success 'preserve merge setup' '
+       git reset --hard before-rebase &&
+       git checkout -b keep-merge second^ &&
+       test_commit file3 &&
+       git checkout to-rebase &&
+       git merge keep-merge &&
+       git tag before-preserve-rebase
+'
+
+test_expect_success 'pull.rebase=false create a new merge commit' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase false &&
+       git pull . copy &&
+       test $(git rev-parse HEAD^1) = $(git rev-parse before-preserve-rebase) &&
+       test $(git rev-parse HEAD^2) = $(git rev-parse copy) &&
+       test file3 = $(git show HEAD:file3.t)
+'
+
+test_expect_success 'pull.rebase=true flattens keep-merge' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase true &&
+       git pull . copy &&
+       test $(git rev-parse HEAD^^) = $(git rev-parse copy) &&
+       test file3 = $(git show HEAD:file3.t)
+'
+
+test_expect_success 'pull.rebase=1 is treated as true and flattens keep-merge' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase 1 &&
+       git pull . copy &&
+       test $(git rev-parse HEAD^^) = $(git rev-parse copy) &&
+       test file3 = $(git show HEAD:file3.t)
+'
+
+test_expect_success 'pull.rebase=preserve rebases and merges keep-merge' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase preserve &&
+       git pull . copy &&
+       test $(git rev-parse HEAD^^) = $(git rev-parse copy) &&
+       test $(git rev-parse HEAD^2) = $(git rev-parse keep-merge)
+'
+
+test_expect_success 'pull.rebase=invalid fails' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase invalid &&
+       ! git pull . copy
+'
+
+test_expect_success '--rebase=false create a new merge commit' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase true &&
+       git pull --rebase=false . copy &&
+       test $(git rev-parse HEAD^1) = $(git rev-parse before-preserve-rebase) &&
+       test $(git rev-parse HEAD^2) = $(git rev-parse copy) &&
+       test file3 = $(git show HEAD:file3.t)
+'
+
+test_expect_success '--rebase=true rebases and flattens keep-merge' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase preserve &&
+       git pull --rebase=true . copy &&
+       test $(git rev-parse HEAD^^) = $(git rev-parse copy) &&
+       test file3 = $(git show HEAD:file3.t)
+'
+
+test_expect_success '--rebase=preserve rebases and merges keep-merge' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase true &&
+       git pull --rebase=preserve . copy &&
+       test $(git rev-parse HEAD^^) = $(git rev-parse copy) &&
+       test $(git rev-parse HEAD^2) = $(git rev-parse keep-merge)
+'
+
+test_expect_success '--rebase=invalid fails' '
+       git reset --hard before-preserve-rebase &&
+       ! git pull --rebase=invalid . copy
+'
+
+test_expect_success '--rebase overrides pull.rebase=preserve and flattens keep-merge' '
+       git reset --hard before-preserve-rebase &&
+       test_config pull.rebase preserve &&
+       git pull --rebase . copy &&
+       test $(git rev-parse HEAD^^) = $(git rev-parse copy) &&
+       test file3 = $(git show HEAD:file3.t)
+'
+
 test_expect_success '--rebase with rebased upstream' '
 
        git remote add -f me . &&
@@ -200,9 +285,9 @@ test_expect_success 'pull --rebase dies early with dirty working directory' '
        git update-ref refs/remotes/me/copy copy^ &&
        COPY=$(git rev-parse --verify me/copy) &&
        git rebase --onto $COPY copy &&
-       git config branch.to-rebase.remote me &&
-       git config branch.to-rebase.merge refs/heads/copy &&
-       git config branch.to-rebase.rebase true &&
+       test_config branch.to-rebase.remote me &&
+       test_config branch.to-rebase.merge refs/heads/copy &&
+       test_config branch.to-rebase.rebase true &&
        echo dirty >> file &&
        git add file &&
        test_must_fail git pull &&