]>
Commit | Line | Data |
---|---|---|
ef484add RA |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2019 Rohit Ashiwal | |
4 | # | |
5 | ||
6 | test_description='tests to ensure compatibility between am and interactive backends' | |
7 | ||
8 | . ./test-lib.sh | |
9 | ||
10 | . "$TEST_DIRECTORY"/lib-rebase.sh | |
11 | ||
7573cec5 PW |
12 | GIT_AUTHOR_DATE="1999-04-02T08:03:20+05:30" |
13 | export GIT_AUTHOR_DATE | |
14 | ||
ef484add RA |
15 | # This is a special case in which both am and interactive backends |
16 | # provide the same output. It was done intentionally because | |
17 | # both the backends fall short of optimal behaviour. | |
18 | test_expect_success 'setup' ' | |
19 | git checkout -b topic && | |
20 | test_write_lines "line 1" " line 2" "line 3" >file && | |
21 | git add file && | |
22 | git commit -m "add file" && | |
23 | ||
24 | test_write_lines "line 1" "new line 2" "line 3" >file && | |
25 | git commit -am "update file" && | |
26 | git tag side && | |
7573cec5 PW |
27 | test_commit commit1 foo foo1 && |
28 | test_commit commit2 foo foo2 && | |
29 | test_commit commit3 foo foo3 && | |
ef484add RA |
30 | |
31 | git checkout --orphan master && | |
7573cec5 | 32 | rm foo && |
ef484add RA |
33 | test_write_lines "line 1" " line 2" "line 3" >file && |
34 | git commit -am "add file" && | |
7573cec5 PW |
35 | git tag main && |
36 | ||
37 | mkdir test-bin && | |
38 | write_script test-bin/git-merge-test <<-\EOF | |
6160b2e9 | 39 | exec git merge-recursive "$@" |
7573cec5 | 40 | EOF |
ef484add RA |
41 | ' |
42 | ||
43 | test_expect_success '--ignore-whitespace works with apply backend' ' | |
44 | test_must_fail git rebase --apply main side && | |
45 | git rebase --abort && | |
46 | git rebase --apply --ignore-whitespace main side && | |
47 | git diff --exit-code side | |
48 | ' | |
49 | ||
50 | test_expect_success '--ignore-whitespace works with merge backend' ' | |
51 | test_must_fail git rebase --merge main side && | |
52 | git rebase --abort && | |
53 | git rebase --merge --ignore-whitespace main side && | |
54 | git diff --exit-code side | |
55 | ' | |
56 | ||
57 | test_expect_success '--ignore-whitespace is remembered when continuing' ' | |
58 | ( | |
59 | set_fake_editor && | |
60 | FAKE_LINES="break 1" git rebase -i --ignore-whitespace \ | |
61 | main side && | |
62 | git rebase --continue | |
63 | ) && | |
64 | git diff --exit-code side | |
65 | ' | |
66 | ||
7573cec5 | 67 | test_ctime_is_atime () { |
56706dba JK |
68 | git log $1 --format="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> %ai" >authortime && |
69 | git log $1 --format="%cn <%ce> %ci" >committertime && | |
7573cec5 PW |
70 | test_cmp authortime committertime |
71 | } | |
72 | ||
16b0bb99 | 73 | test_expect_success '--committer-date-is-author-date works with apply backend' ' |
7573cec5 PW |
74 | GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author && |
75 | git rebase --apply --committer-date-is-author-date HEAD^ && | |
76 | test_ctime_is_atime -1 | |
77 | ' | |
78 | ||
5f35edd9 | 79 | test_expect_success '--committer-date-is-author-date works with merge backend' ' |
7573cec5 PW |
80 | GIT_AUTHOR_DATE="@1234 +0300" git commit --amend --reset-author && |
81 | git rebase -m --committer-date-is-author-date HEAD^ && | |
82 | test_ctime_is_atime -1 | |
83 | ' | |
84 | ||
5f35edd9 | 85 | test_expect_success '--committer-date-is-author-date works with rebase -r' ' |
7573cec5 PW |
86 | git checkout side && |
87 | GIT_AUTHOR_DATE="@1234 +0300" git merge --no-ff commit3 && | |
88 | git rebase -r --root --committer-date-is-author-date && | |
89 | test_ctime_is_atime | |
90 | ' | |
91 | ||
5f35edd9 | 92 | test_expect_success '--committer-date-is-author-date works when forking merge' ' |
7573cec5 PW |
93 | git checkout side && |
94 | GIT_AUTHOR_DATE="@1234 +0300" git merge --no-ff commit3 && | |
95 | PATH="./test-bin:$PATH" git rebase -r --root --strategy=test \ | |
96 | --committer-date-is-author-date && | |
97 | test_ctime_is_atime | |
98 | ' | |
99 | ||
100 | test_expect_success '--committer-date-is-author-date works when committing conflict resolution' ' | |
101 | git checkout commit2 && | |
102 | GIT_AUTHOR_DATE="@1980 +0000" git commit --amend --only --reset-author && | |
103 | test_must_fail git rebase -m --committer-date-is-author-date \ | |
104 | --onto HEAD^^ HEAD^ && | |
105 | echo resolved > foo && | |
106 | git add foo && | |
107 | git rebase --continue && | |
108 | test_ctime_is_atime -1 | |
109 | ' | |
110 | ||
a3894aad PW |
111 | # Checking for +0000 in the author date is sufficient since the |
112 | # default timezone is UTC but the timezone used while committing is | |
113 | # +0530. The inverted logic in the grep is necessary to check all the | |
114 | # author dates in the file. | |
115 | test_atime_is_ignored () { | |
116 | git log $1 --format=%ai >authortime && | |
117 | ! grep -v +0000 authortime | |
118 | } | |
119 | ||
27126692 | 120 | test_expect_success '--reset-author-date works with apply backend' ' |
a3894aad | 121 | git commit --amend --date="$GIT_AUTHOR_DATE" && |
27126692 | 122 | git rebase --apply --reset-author-date HEAD^ && |
a3894aad PW |
123 | test_atime_is_ignored -1 |
124 | ' | |
125 | ||
27126692 | 126 | test_expect_success '--reset-author-date works with merge backend' ' |
a3894aad | 127 | git commit --amend --date="$GIT_AUTHOR_DATE" && |
27126692 | 128 | git rebase --reset-author-date -m HEAD^ && |
a3894aad PW |
129 | test_atime_is_ignored -1 |
130 | ' | |
131 | ||
27126692 RA |
132 | test_expect_success '--reset-author-date works after conflict resolution' ' |
133 | test_must_fail git rebase --reset-author-date -m \ | |
a3894aad PW |
134 | --onto commit2^^ commit2^ commit2 && |
135 | echo resolved >foo && | |
136 | git add foo && | |
137 | git rebase --continue && | |
138 | test_atime_is_ignored -1 | |
139 | ' | |
140 | ||
27126692 | 141 | test_expect_success '--reset-author-date works with rebase -r' ' |
a3894aad PW |
142 | git checkout side && |
143 | git merge --no-ff commit3 && | |
27126692 | 144 | git rebase -r --root --reset-author-date && |
a3894aad PW |
145 | test_atime_is_ignored |
146 | ' | |
147 | ||
5f35edd9 | 148 | test_expect_success '--reset-author-date with --committer-date-is-author-date works' ' |
a3894aad | 149 | test_must_fail git rebase -m --committer-date-is-author-date \ |
27126692 | 150 | --reset-author-date --onto commit2^^ commit2^ commit3 && |
a3894aad PW |
151 | git checkout --theirs foo && |
152 | git add foo && | |
153 | git rebase --continue && | |
154 | test_ctime_is_atime -2 && | |
155 | test_atime_is_ignored -2 | |
156 | ' | |
157 | ||
27126692 | 158 | test_expect_success '--reset-author-date --committer-date-is-author-date works when forking merge' ' |
a3894aad PW |
159 | GIT_SEQUENCE_EDITOR="echo \"merge -C $(git rev-parse HEAD) commit3\">" \ |
160 | PATH="./test-bin:$PATH" git rebase -i --strategy=test \ | |
27126692 RA |
161 | --reset-author-date \ |
162 | --committer-date-is-author-date side side && | |
a3894aad PW |
163 | test_ctime_is_atime -1 && |
164 | test_atime_is_ignored -1 | |
165 | ' | |
166 | ||
27126692 RA |
167 | test_expect_success '--ignore-date is an alias for --reset-author-date' ' |
168 | git commit --amend --date="$GIT_AUTHOR_DATE" && | |
169 | git rebase --apply --ignore-date HEAD^ && | |
170 | git commit --allow-empty -m empty --date="$GIT_AUTHOR_DATE" && | |
171 | git rebase -m --ignore-date HEAD^ && | |
172 | test_atime_is_ignored -2 | |
173 | ' | |
174 | ||
ef484add RA |
175 | # This must be the last test in this file |
176 | test_expect_success '$EDITOR and friends are unchanged' ' | |
177 | test_editor_unchanged | |
178 | ' | |
179 | ||
180 | test_done |