summaryrefslogtreecommitdiff
path: root/t/t3433-rebase-options-compatibility.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/t3433-rebase-options-compatibility.sh')
-rwxr-xr-xt/t3433-rebase-options-compatibility.sh131
1 files changed, 131 insertions, 0 deletions
diff --git a/t/t3433-rebase-options-compatibility.sh b/t/t3433-rebase-options-compatibility.sh
new file mode 100755
index 0000000000..5166f158dd
--- /dev/null
+++ b/t/t3433-rebase-options-compatibility.sh
@@ -0,0 +1,131 @@
+#!/bin/sh
+#
+# Copyright (c) 2019 Rohit Ashiwal
+#
+
+test_description='tests to ensure compatibility between am and interactive backends'
+
+. ./test-lib.sh
+
+GIT_AUTHOR_DATE="1999-04-02T08:03:20+05:30"
+export GIT_AUTHOR_DATE
+
+# This is a special case in which both am and interactive backends
+# provide the same output. It was done intentionally because
+# both the backends fall short of optimal behaviour.
+test_expect_success 'setup' '
+ git checkout -b topic &&
+ q_to_tab >file <<-\EOF &&
+ line 1
+ Qline 2
+ line 3
+ EOF
+ git add file &&
+ git commit -m "add file" &&
+ cat >file <<-\EOF &&
+ line 1
+ new line 2
+ line 3
+ EOF
+ git commit -am "update file" &&
+ git tag side &&
+ test_commit commit1 foo foo1 &&
+ test_commit commit2 foo foo2 &&
+ test_commit commit3 foo foo3 &&
+
+ git checkout --orphan master &&
+ git rm --cached foo &&
+ rm foo &&
+ sed -e "s/^|//" >file <<-\EOF &&
+ |line 1
+ | line 2
+ |line 3
+ EOF
+ git add file &&
+ git commit -m "add file" &&
+ git tag main
+'
+
+test_expect_success '--ignore-whitespace works with am backend' '
+ cat >expect <<-\EOF &&
+ line 1
+ new line 2
+ line 3
+ EOF
+ test_must_fail git rebase main side &&
+ git rebase --abort &&
+ git rebase --ignore-whitespace main side &&
+ test_cmp expect file
+'
+
+test_expect_success '--ignore-whitespace works with interactive backend' '
+ cat >expect <<-\EOF &&
+ line 1
+ new line 2
+ line 3
+ EOF
+ test_must_fail git rebase --merge main side &&
+ git rebase --abort &&
+ git rebase --merge --ignore-whitespace main side &&
+ test_cmp expect file
+'
+
+test_expect_success '--committer-date-is-author-date works with am backend' '
+ git commit --amend &&
+ git rebase --committer-date-is-author-date HEAD^ &&
+ git show HEAD --pretty="format:%ai" >authortime &&
+ git show HEAD --pretty="format:%ci" >committertime &&
+ test_cmp authortime committertime
+'
+
+test_expect_success '--committer-date-is-author-date works with interactive backend' '
+ git commit --amend &&
+ git rebase -i --committer-date-is-author-date HEAD^ &&
+ git show HEAD --pretty="format:%ai" >authortime &&
+ git show HEAD --pretty="format:%ci" >committertime &&
+ test_cmp authortime committertime
+'
+
+test_expect_success '--committer-date-is-author-date works with rebase -r' '
+ git checkout side &&
+ git merge --no-ff commit3 &&
+ git rebase -r --root --committer-date-is-author-date &&
+ git rev-list HEAD >rev_list &&
+ while read HASH
+ do
+ git show $HASH --pretty="format:%ai" >authortime
+ git show $HASH --pretty="format:%ci" >committertime
+ test_cmp authortime committertime
+ done <rev_list
+'
+
+# Checking for +0000 in author time is enough since default
+# timezone is UTC, but the timezone used while committing
+# sets to +0530.
+test_expect_success '--ignore-date works with am backend' '
+ git commit --amend --date="$GIT_AUTHOR_DATE" &&
+ git rebase --ignore-date HEAD^ &&
+ git show HEAD --pretty="format:%ai" >authortime &&
+ grep "+0000" authortime
+'
+
+test_expect_success '--ignore-date works with interactive backend' '
+ git commit --amend --date="$GIT_AUTHOR_DATE" &&
+ git rebase --ignore-date -i HEAD^ &&
+ git show HEAD --pretty="format:%ai" >authortime &&
+ grep "+0000" authortime
+'
+
+test_expect_success '--ignore-date works with rebase -r' '
+ git checkout side &&
+ git merge --no-ff commit3 &&
+ git rebase -r --root --ignore-date &&
+ git rev-list HEAD >rev_list &&
+ while read HASH
+ do
+ git show $HASH --pretty="format:%ai" >authortime
+ grep "+0000" authortime
+ done <rev_list
+'
+
+test_done