summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to 't')
-rw-r--r--t/lib-rebase.sh7
-rwxr-xr-xt/t3437-rebase-fixup-options.sh122
2 files changed, 70 insertions, 59 deletions
diff --git a/t/lib-rebase.sh b/t/lib-rebase.sh
index 27928ecb94..dc75b83451 100644
--- a/t/lib-rebase.sh
+++ b/t/lib-rebase.sh
@@ -15,10 +15,11 @@
# specified line.
#
# "<cmd> <lineno>" -- add a line with the specified command
-# ("pick", "squash", "fixup", "edit", "reword" or "drop") and the
-# SHA1 taken from the specified line.
+# ("pick", "squash", "fixup"|"fixup_-C"|"fixup_-c", "edit", "reword" or "drop")
+# and the SHA1 taken from the specified line.
#
-# "exec_cmd_with_args" -- add an "exec cmd with args" line.
+# "_" -- add a space, like "fixup_-C" implies "fixup -C" and
+# "exec_cmd_with_args" add an "exec cmd with args" line.
#
# "#" -- Add a comment line.
#
diff --git a/t/t3437-rebase-fixup-options.sh b/t/t3437-rebase-fixup-options.sh
index 945df2555b..a5a20354e3 100755
--- a/t/t3437-rebase-fixup-options.sh
+++ b/t/t3437-rebase-fixup-options.sh
@@ -9,7 +9,9 @@ This test checks the "fixup [-C|-c]" command of rebase interactive.
In addition to amending the contents of the commit, "fixup -C"
replaces the original commit message with the message of the fixup
commit. "fixup -c" also replaces the original message, but opens the
-editor to allow the user to edit the message before committing.
+editor to allow the user to edit the message before committing. Similar
+to the "fixup" command that works with "fixup!", "fixup -C" works with
+"amend!" upon --autosquash.
'
. ./test-lib.sh
@@ -18,35 +20,35 @@ editor to allow the user to edit the message before committing.
EMPTY=""
+# test_commit_message <rev> -m <msg>
+# test_commit_message <rev> <path>
+# Verify that the commit message of <rev> matches
+# <msg> or the content of <path>.
test_commit_message () {
- rev="$1" && # commit or tag we want to test
- file="$2" && # test against the content of a file
- git show --no-patch --pretty=format:%B "$rev" >actual-message &&
- if test "$2" = -m
- then
- str="$3" && # test against a string
- printf "%s\n" "$str" >tmp-expected-message &&
- file="tmp-expected-message"
- fi
- test_cmp "$file" actual-message
+ git show --no-patch --pretty=format:%B "$1" >actual &&
+ case "$2" in
+ -m)
+ echo "$3" >expect &&
+ test_cmp expect actual ;;
+ *)
+ test_cmp "$2" actual ;;
+ esac
}
get_author () {
rev="$1" &&
- git log -1 --pretty=format:"%an %ae" "$rev"
+ git log -1 --pretty=format:"%an %ae %at" "$rev"
}
test_expect_success 'setup' '
cat >message <<-EOF &&
- amend! B
- ${EMPTY}
- new subject
- ${EMPTY}
- new
- body
- EOF
-
- sed "1,2d" message >expected-message &&
+ amend! B
+ $EMPTY
+ new subject
+ $EMPTY
+ new
+ body
+ EOF
test_commit A A &&
test_commit B B &&
@@ -68,40 +70,43 @@ test_expect_success 'setup' '
echo B1 >B &&
test_tick &&
git commit --fixup=HEAD -a &&
+ git tag B1 &&
test_tick &&
git commit --allow-empty -F - <<-EOF &&
- amend! B
- ${EMPTY}
- B
- ${EMPTY}
- edited 1
- EOF
+ amend! B
+ $EMPTY
+ B
+ $EMPTY
+ edited 1
+ EOF
test_tick &&
git commit --allow-empty -F - <<-EOF &&
- amend! amend! B
- ${EMPTY}
- B
- ${EMPTY}
- edited 1
- ${EMPTY}
- edited 2
- EOF
+ amend! amend! B
+ $EMPTY
+ B
+ $EMPTY
+ edited 1
+ $EMPTY
+ edited 2
+ EOF
echo B2 >B &&
test_tick &&
FAKE_COMMIT_AMEND="edited squash" git commit --squash=HEAD -a &&
+ git tag B2 &&
echo B3 >B &&
test_tick &&
git commit -a -F - <<-EOF &&
- amend! amend! amend! B
- ${EMPTY}
- B
- ${EMPTY}
- edited 1
- ${EMPTY}
- edited 2
- ${EMPTY}
- edited 3
- EOF
+ amend! amend! amend! B
+ $EMPTY
+ B
+ $EMPTY
+ edited 1
+ $EMPTY
+ edited 2
+ $EMPTY
+ edited 3
+ EOF
+ git tag B3 &&
GIT_AUTHOR_NAME="Rebase Author" &&
GIT_AUTHOR_EMAIL="rebase.author@example.com" &&
@@ -134,6 +139,7 @@ test_expect_success 'simple fixup -c works' '
test_expect_success 'fixup -C removes amend! from message' '
test_when_finished "test_might_fail git rebase --abort" &&
git checkout --detach A1 &&
+ git log -1 --pretty=format:%b >expected-message &&
FAKE_LINES="1 fixup_-C 2" git rebase -i A &&
test_cmp_rev HEAD^ A &&
test_cmp_rev HEAD^{tree} A1^{tree} &&
@@ -145,13 +151,14 @@ test_expect_success 'fixup -C removes amend! from message' '
test_expect_success 'fixup -C with conflicts gives correct message' '
test_when_finished "test_might_fail git rebase --abort" &&
git checkout --detach A1 &&
+ git log -1 --pretty=format:%b >expected-message &&
+ test_write_lines "" "edited" >>expected-message &&
test_must_fail env FAKE_LINES="1 fixup_-C 2" git rebase -i conflicts &&
git checkout --theirs -- A &&
git add A &&
FAKE_COMMIT_AMEND=edited git rebase --continue &&
test_cmp_rev HEAD^ conflicts &&
test_cmp_rev HEAD^{tree} A1^{tree} &&
- test_write_lines "" edited >>expected-message &&
test_commit_message HEAD expected-message &&
get_author HEAD >actual-author &&
test_cmp expected-author actual-author
@@ -167,12 +174,12 @@ test_expect_success 'skipping fixup -C after fixup gives correct message' '
'
test_expect_success 'sequence of fixup, fixup -C & squash --signoff works' '
- git checkout --detach branch &&
+ git checkout --detach B3 &&
FAKE_LINES="1 fixup 2 fixup_-C 3 fixup_-C 4 squash 5 fixup_-C 6" \
FAKE_COMMIT_AMEND=squashed \
FAKE_MESSAGE_COPY=actual-squash-message \
git -c commit.status=false rebase -ik --signoff A &&
- git diff-tree --exit-code --patch HEAD branch -- &&
+ git diff-tree --exit-code --patch HEAD B3 -- &&
test_cmp_rev HEAD^ A &&
test_i18ncmp "$TEST_DIRECTORY/t3437/expected-squash-message" \
actual-squash-message
@@ -180,7 +187,7 @@ test_expect_success 'sequence of fixup, fixup -C & squash --signoff works' '
test_expect_success 'first fixup -C commented out in sequence fixup fixup -C fixup -C' '
test_when_finished "test_might_fail git rebase --abort" &&
- git checkout branch && git checkout --detach branch~2 &&
+ git checkout --detach B2~ &&
git log -1 --pretty=format:%b >expected-message &&
FAKE_LINES="1 fixup 2 fixup_-C 3 fixup_-C 4" git rebase -i A &&
test_cmp_rev HEAD^ A &&
@@ -190,13 +197,16 @@ test_expect_success 'first fixup -C commented out in sequence fixup fixup -C fix
test_expect_success 'multiple fixup -c opens editor once' '
test_when_finished "test_might_fail git rebase --abort" &&
git checkout --detach A3 &&
- base=$(git rev-parse HEAD~4) &&
- FAKE_COMMIT_MESSAGE="Modified-A3" \
+ git log -1 --pretty=format:%B >expected-message &&
+ test_write_lines "" "Modified-A3" >>expected-message &&
+ FAKE_COMMIT_AMEND="Modified-A3" \
FAKE_LINES="1 fixup_-C 2 fixup_-c 3 fixup_-c 4" \
EXPECT_HEADER_COUNT=4 \
- git rebase -i $base &&
- test_cmp_rev $base HEAD^ &&
- test 1 = $(git show | grep Modified-A3 | wc -l)
+ git rebase -i A &&
+ test_cmp_rev HEAD^ A &&
+ get_author HEAD >actual-author &&
+ test_cmp expected-author actual-author &&
+ test_commit_message HEAD expected-message
'
test_expect_success 'sequence squash, fixup & fixup -c gives combined message' '
@@ -211,12 +221,12 @@ test_expect_success 'sequence squash, fixup & fixup -c gives combined message' '
'
test_expect_success 'fixup -C works upon --autosquash with amend!' '
- git checkout --detach branch &&
+ git checkout --detach B3 &&
FAKE_COMMIT_AMEND=squashed \
FAKE_MESSAGE_COPY=actual-squash-message \
git -c commit.status=false rebase -ik --autosquash \
--signoff A &&
- git diff-tree --exit-code --patch HEAD branch -- &&
+ git diff-tree --exit-code --patch HEAD B3 -- &&
test_cmp_rev HEAD^ A &&
test_i18ncmp "$TEST_DIRECTORY/t3437/expected-squash-message" \
actual-squash-message