Merge branch 'dl/test-must-fail-fixes-2'
Test updates. * dl/test-must-fail-fixes-2: t4124: only mark git command with test_must_fail t3507: use test_path_is_missing() t3507: fix indentation t3504: do check for conflict marker after failed cherry-pick t3419: stop losing return code of git command t3415: increase granularity of test_auto_{fixup,squash}() t3415: stop losing return codes of git commands t3310: extract common notes_merge_files_gone() t3030: use test_path_is_missing() t2018: replace "sha" with "oid" t2018: don't lose return code of git commands t2018: teach do_checkout() to accept `!` arg t2018: be more discerning when checking for expected exit codes t2018: improve style of if-statement t2018: add space between function name and () t2018: remove trailing space from test descriptionmaint
commit
f7f43afb19
|
@ -1,50 +1,76 @@
|
|||
#!/bin/sh
|
||||
|
||||
test_description='checkout '
|
||||
test_description='checkout'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
# Arguments: <branch> <sha> [<checkout options>]
|
||||
# Arguments: [!] <branch> <oid> [<checkout options>]
|
||||
#
|
||||
# Runs "git checkout" to switch to <branch>, testing that
|
||||
#
|
||||
# 1) we are on the specified branch, <branch>;
|
||||
# 2) HEAD is <sha>; if <sha> is not specified, the old HEAD is used.
|
||||
# 2) HEAD is <oid>; if <oid> is not specified, the old HEAD is used.
|
||||
#
|
||||
# If <checkout options> is not specified, "git checkout" is run with -b.
|
||||
do_checkout() {
|
||||
#
|
||||
# If the first argument is `!`, "git checkout" is expected to fail when
|
||||
# it is run.
|
||||
do_checkout () {
|
||||
should_fail= &&
|
||||
if test "x$1" = "x!"
|
||||
then
|
||||
should_fail=yes &&
|
||||
shift
|
||||
fi &&
|
||||
exp_branch=$1 &&
|
||||
exp_ref="refs/heads/$exp_branch" &&
|
||||
|
||||
# if <sha> is not specified, use HEAD.
|
||||
exp_sha=${2:-$(git rev-parse --verify HEAD)} &&
|
||||
# if <oid> is not specified, use HEAD.
|
||||
exp_oid=${2:-$(git rev-parse --verify HEAD)} &&
|
||||
|
||||
# default options for git checkout: -b
|
||||
if [ -z "$3" ]; then
|
||||
if test -z "$3"
|
||||
then
|
||||
opts="-b"
|
||||
else
|
||||
opts="$3"
|
||||
fi
|
||||
|
||||
git checkout $opts $exp_branch $exp_sha &&
|
||||
|
||||
test $exp_ref = $(git rev-parse --symbolic-full-name HEAD) &&
|
||||
test $exp_sha = $(git rev-parse --verify HEAD)
|
||||
if test -n "$should_fail"
|
||||
then
|
||||
test_must_fail git checkout $opts $exp_branch $exp_oid
|
||||
else
|
||||
git checkout $opts $exp_branch $exp_oid &&
|
||||
echo "$exp_ref" >ref.expect &&
|
||||
git rev-parse --symbolic-full-name HEAD >ref.actual &&
|
||||
test_cmp ref.expect ref.actual &&
|
||||
echo "$exp_oid" >oid.expect &&
|
||||
git rev-parse --verify HEAD >oid.actual &&
|
||||
test_cmp oid.expect oid.actual
|
||||
fi
|
||||
}
|
||||
|
||||
test_dirty_unmergeable() {
|
||||
! git diff --exit-code >/dev/null
|
||||
test_dirty_unmergeable () {
|
||||
test_expect_code 1 git diff --exit-code
|
||||
}
|
||||
|
||||
setup_dirty_unmergeable() {
|
||||
test_dirty_unmergeable_discards_changes () {
|
||||
git diff --exit-code
|
||||
}
|
||||
|
||||
setup_dirty_unmergeable () {
|
||||
echo >>file1 change2
|
||||
}
|
||||
|
||||
test_dirty_mergeable() {
|
||||
! git diff --cached --exit-code >/dev/null
|
||||
test_dirty_mergeable () {
|
||||
test_expect_code 1 git diff --cached --exit-code
|
||||
}
|
||||
|
||||
setup_dirty_mergeable() {
|
||||
test_dirty_mergeable_discards_changes () {
|
||||
git diff --cached --exit-code
|
||||
}
|
||||
|
||||
setup_dirty_mergeable () {
|
||||
echo >file2 file2 &&
|
||||
git add file2
|
||||
}
|
||||
|
@ -82,7 +108,7 @@ test_expect_success 'checkout -b to a new branch, set to an explicit ref' '
|
|||
|
||||
test_expect_success 'checkout -b to a new branch with unmergeable changes fails' '
|
||||
setup_dirty_unmergeable &&
|
||||
test_must_fail do_checkout branch2 $HEAD1 &&
|
||||
do_checkout ! branch2 $HEAD1 &&
|
||||
test_dirty_unmergeable
|
||||
'
|
||||
|
||||
|
@ -93,7 +119,7 @@ test_expect_success 'checkout -f -b to a new branch with unmergeable changes dis
|
|||
|
||||
# still dirty and on branch1
|
||||
do_checkout branch2 $HEAD1 "-f -b" &&
|
||||
test_must_fail test_dirty_unmergeable
|
||||
test_dirty_unmergeable_discards_changes
|
||||
'
|
||||
|
||||
test_expect_success 'checkout -b to a new branch preserves mergeable changes' '
|
||||
|
@ -111,12 +137,12 @@ test_expect_success 'checkout -f -b to a new branch with mergeable changes disca
|
|||
test_when_finished git reset --hard HEAD &&
|
||||
setup_dirty_mergeable &&
|
||||
do_checkout branch2 $HEAD1 "-f -b" &&
|
||||
test_must_fail test_dirty_mergeable
|
||||
test_dirty_mergeable_discards_changes
|
||||
'
|
||||
|
||||
test_expect_success 'checkout -b to an existing branch fails' '
|
||||
test_when_finished git reset --hard HEAD &&
|
||||
test_must_fail do_checkout branch2 $HEAD2
|
||||
do_checkout ! branch2 $HEAD2
|
||||
'
|
||||
|
||||
test_expect_success 'checkout -b to @{-1} fails with the right branch name' '
|
||||
|
@ -140,7 +166,8 @@ test_expect_success 'checkout -B to a merge base' '
|
|||
'
|
||||
|
||||
test_expect_success 'checkout -B to an existing branch from detached HEAD resets branch to HEAD' '
|
||||
git checkout $(git rev-parse --verify HEAD) &&
|
||||
head=$(git rev-parse --verify HEAD) &&
|
||||
git checkout "$head" &&
|
||||
|
||||
do_checkout branch2 "" -B
|
||||
'
|
||||
|
@ -155,14 +182,14 @@ test_expect_success 'checkout -B to an existing branch with unmergeable changes
|
|||
git checkout branch1 &&
|
||||
|
||||
setup_dirty_unmergeable &&
|
||||
test_must_fail do_checkout branch2 $HEAD1 -B &&
|
||||
do_checkout ! branch2 $HEAD1 -B &&
|
||||
test_dirty_unmergeable
|
||||
'
|
||||
|
||||
test_expect_success 'checkout -f -B to an existing branch with unmergeable changes discards changes' '
|
||||
# still dirty and on branch1
|
||||
do_checkout branch2 $HEAD1 "-f -B" &&
|
||||
test_must_fail test_dirty_unmergeable
|
||||
test_dirty_unmergeable_discards_changes
|
||||
'
|
||||
|
||||
test_expect_success 'checkout -B to an existing branch preserves mergeable changes' '
|
||||
|
@ -179,7 +206,7 @@ test_expect_success 'checkout -f -B to an existing branch with mergeable changes
|
|||
|
||||
setup_dirty_mergeable &&
|
||||
do_checkout branch2 $HEAD1 "-f -B" &&
|
||||
test_must_fail test_dirty_mergeable
|
||||
test_dirty_mergeable_discards_changes
|
||||
'
|
||||
|
||||
test_expect_success 'checkout -b <describe>' '
|
||||
|
|
|
@ -604,7 +604,7 @@ test_expect_success 'merge removes empty directories' '
|
|||
git commit -mremoved-d/e &&
|
||||
git checkout master &&
|
||||
git merge -s recursive rm &&
|
||||
test_must_fail test -d d
|
||||
test_path_is_missing d
|
||||
'
|
||||
|
||||
test_expect_success 'merge-recursive simple w/submodule' '
|
||||
|
|
|
@ -32,6 +32,12 @@ verify_notes () {
|
|||
test_cmp "expect_log_$notes_ref" "output_log_$notes_ref"
|
||||
}
|
||||
|
||||
notes_merge_files_gone () {
|
||||
# No .git/NOTES_MERGE_* files left
|
||||
{ ls .git/NOTES_MERGE_* >output || :; } &&
|
||||
test_must_be_empty output
|
||||
}
|
||||
|
||||
cat <<EOF | sort >expect_notes_x
|
||||
6e8e3febca3c2bb896704335cc4d0c34cb2f8715 $commit_sha4
|
||||
e5388c10860456ee60673025345fe2e153eb8cf8 $commit_sha3
|
||||
|
@ -335,9 +341,7 @@ EOF
|
|||
y and z notes on 4th commit
|
||||
EOF
|
||||
git notes merge --commit &&
|
||||
# No .git/NOTES_MERGE_* files left
|
||||
test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
|
||||
test_must_be_empty output &&
|
||||
notes_merge_files_gone &&
|
||||
# Merge commit has pre-merge y and pre-merge z as parents
|
||||
test "$(git rev-parse refs/notes/m^1)" = "$(cat pre_merge_y)" &&
|
||||
test "$(git rev-parse refs/notes/m^2)" = "$(cat pre_merge_z)" &&
|
||||
|
@ -397,9 +401,7 @@ test_expect_success 'redo merge of z into m (== y) with default ("manual") resol
|
|||
|
||||
test_expect_success 'abort notes merge' '
|
||||
git notes merge --abort &&
|
||||
# No .git/NOTES_MERGE_* files left
|
||||
test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
|
||||
test_must_be_empty output &&
|
||||
notes_merge_files_gone &&
|
||||
# m has not moved (still == y)
|
||||
test "$(git rev-parse refs/notes/m)" = "$(cat pre_merge_y)" &&
|
||||
# Verify that other notes refs has not changed (w, x, y and z)
|
||||
|
@ -464,9 +466,7 @@ EOF
|
|||
echo "new note on 5th commit" > .git/NOTES_MERGE_WORKTREE/$commit_sha5 &&
|
||||
# Finalize merge
|
||||
git notes merge --commit &&
|
||||
# No .git/NOTES_MERGE_* files left
|
||||
test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
|
||||
test_must_be_empty output &&
|
||||
notes_merge_files_gone &&
|
||||
# Merge commit has pre-merge y and pre-merge z as parents
|
||||
test "$(git rev-parse refs/notes/m^1)" = "$(cat pre_merge_y)" &&
|
||||
test "$(git rev-parse refs/notes/m^2)" = "$(cat pre_merge_z)" &&
|
||||
|
@ -553,9 +553,7 @@ EOF
|
|||
|
||||
test_expect_success 'resolve situation by aborting the notes merge' '
|
||||
git notes merge --abort &&
|
||||
# No .git/NOTES_MERGE_* files left
|
||||
test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null &&
|
||||
test_must_be_empty output &&
|
||||
notes_merge_files_gone &&
|
||||
# m has not moved (still == w)
|
||||
test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)" &&
|
||||
# Verify that other notes refs has not changed (w, x, y and z)
|
||||
|
|
|
@ -25,6 +25,13 @@ test_expect_success setup '
|
|||
'
|
||||
|
||||
test_auto_fixup () {
|
||||
no_squash= &&
|
||||
if test "x$1" = 'x!'
|
||||
then
|
||||
no_squash=true
|
||||
shift
|
||||
fi &&
|
||||
|
||||
git reset --hard base &&
|
||||
echo 1 >file1 &&
|
||||
git add -u &&
|
||||
|
@ -35,10 +42,19 @@ test_auto_fixup () {
|
|||
test_tick &&
|
||||
git rebase $2 -i HEAD^^^ &&
|
||||
git log --oneline >actual &&
|
||||
test_line_count = 3 actual &&
|
||||
git diff --exit-code $1 &&
|
||||
test 1 = "$(git cat-file blob HEAD^:file1)" &&
|
||||
test 1 = $(git cat-file commit HEAD^ | grep first | wc -l)
|
||||
if test -n "$no_squash"
|
||||
then
|
||||
test_line_count = 4 actual
|
||||
else
|
||||
test_line_count = 3 actual &&
|
||||
git diff --exit-code $1 &&
|
||||
echo 1 >expect &&
|
||||
git cat-file blob HEAD^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD^ >commit &&
|
||||
grep first commit >actual &&
|
||||
test_line_count = 1 actual
|
||||
fi
|
||||
}
|
||||
|
||||
test_expect_success 'auto fixup (option)' '
|
||||
|
@ -48,12 +64,19 @@ test_expect_success 'auto fixup (option)' '
|
|||
test_expect_success 'auto fixup (config)' '
|
||||
git config rebase.autosquash true &&
|
||||
test_auto_fixup final-fixup-config-true &&
|
||||
test_must_fail test_auto_fixup fixup-config-true-no --no-autosquash &&
|
||||
test_auto_fixup ! fixup-config-true-no --no-autosquash &&
|
||||
git config rebase.autosquash false &&
|
||||
test_must_fail test_auto_fixup final-fixup-config-false
|
||||
test_auto_fixup ! final-fixup-config-false
|
||||
'
|
||||
|
||||
test_auto_squash () {
|
||||
no_squash= &&
|
||||
if test "x$1" = 'x!'
|
||||
then
|
||||
no_squash=true
|
||||
shift
|
||||
fi &&
|
||||
|
||||
git reset --hard base &&
|
||||
echo 1 >file1 &&
|
||||
git add -u &&
|
||||
|
@ -64,10 +87,19 @@ test_auto_squash () {
|
|||
test_tick &&
|
||||
git rebase $2 -i HEAD^^^ &&
|
||||
git log --oneline >actual &&
|
||||
test_line_count = 3 actual &&
|
||||
git diff --exit-code $1 &&
|
||||
test 1 = "$(git cat-file blob HEAD^:file1)" &&
|
||||
test 2 = $(git cat-file commit HEAD^ | grep first | wc -l)
|
||||
if test -n "$no_squash"
|
||||
then
|
||||
test_line_count = 4 actual
|
||||
else
|
||||
test_line_count = 3 actual &&
|
||||
git diff --exit-code $1 &&
|
||||
echo 1 >expect &&
|
||||
git cat-file blob HEAD^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD^ >commit &&
|
||||
grep first commit >actual &&
|
||||
test_line_count = 2 actual
|
||||
fi
|
||||
}
|
||||
|
||||
test_expect_success 'auto squash (option)' '
|
||||
|
@ -77,9 +109,9 @@ test_expect_success 'auto squash (option)' '
|
|||
test_expect_success 'auto squash (config)' '
|
||||
git config rebase.autosquash true &&
|
||||
test_auto_squash final-squash-config-true &&
|
||||
test_must_fail test_auto_squash squash-config-true-no --no-autosquash &&
|
||||
test_auto_squash ! squash-config-true-no --no-autosquash &&
|
||||
git config rebase.autosquash false &&
|
||||
test_must_fail test_auto_squash final-squash-config-false
|
||||
test_auto_squash ! final-squash-config-false
|
||||
'
|
||||
|
||||
test_expect_success 'misspelled auto squash' '
|
||||
|
@ -94,7 +126,8 @@ test_expect_success 'misspelled auto squash' '
|
|||
git log --oneline >actual &&
|
||||
test_line_count = 4 actual &&
|
||||
git diff --exit-code final-missquash &&
|
||||
test 0 = $(git rev-list final-missquash...HEAD | wc -l)
|
||||
git rev-list final-missquash...HEAD >list &&
|
||||
test_must_be_empty list
|
||||
'
|
||||
|
||||
test_expect_success 'auto squash that matches 2 commits' '
|
||||
|
@ -113,9 +146,15 @@ test_expect_success 'auto squash that matches 2 commits' '
|
|||
git log --oneline >actual &&
|
||||
test_line_count = 4 actual &&
|
||||
git diff --exit-code final-multisquash &&
|
||||
test 1 = "$(git cat-file blob HEAD^^:file1)" &&
|
||||
test 2 = $(git cat-file commit HEAD^^ | grep first | wc -l) &&
|
||||
test 1 = $(git cat-file commit HEAD | grep first | wc -l)
|
||||
echo 1 >expect &&
|
||||
git cat-file blob HEAD^^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD^^ >commit &&
|
||||
grep first commit >actual &&
|
||||
test_line_count = 2 actual &&
|
||||
git cat-file commit HEAD >commit &&
|
||||
grep first commit >actual &&
|
||||
test_line_count = 1 actual
|
||||
'
|
||||
|
||||
test_expect_success 'auto squash that matches a commit after the squash' '
|
||||
|
@ -134,25 +173,38 @@ test_expect_success 'auto squash that matches a commit after the squash' '
|
|||
git log --oneline >actual &&
|
||||
test_line_count = 5 actual &&
|
||||
git diff --exit-code final-presquash &&
|
||||
test 0 = "$(git cat-file blob HEAD^^:file1)" &&
|
||||
test 1 = "$(git cat-file blob HEAD^:file1)" &&
|
||||
test 1 = $(git cat-file commit HEAD | grep third | wc -l) &&
|
||||
test 1 = $(git cat-file commit HEAD^ | grep third | wc -l)
|
||||
echo 0 >expect &&
|
||||
git cat-file blob HEAD^^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
echo 1 >expect &&
|
||||
git cat-file blob HEAD^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD >commit &&
|
||||
grep third commit >actual &&
|
||||
test_line_count = 1 actual &&
|
||||
git cat-file commit HEAD^ >commit &&
|
||||
grep third commit >actual &&
|
||||
test_line_count = 1 actual
|
||||
'
|
||||
test_expect_success 'auto squash that matches a sha1' '
|
||||
git reset --hard base &&
|
||||
echo 1 >file1 &&
|
||||
git add -u &&
|
||||
test_tick &&
|
||||
git commit -m "squash! $(git rev-parse --short HEAD^)" &&
|
||||
oid=$(git rev-parse --short HEAD^) &&
|
||||
git commit -m "squash! $oid" &&
|
||||
git tag final-shasquash &&
|
||||
test_tick &&
|
||||
git rebase --autosquash -i HEAD^^^ &&
|
||||
git log --oneline >actual &&
|
||||
test_line_count = 3 actual &&
|
||||
git diff --exit-code final-shasquash &&
|
||||
test 1 = "$(git cat-file blob HEAD^:file1)" &&
|
||||
test 1 = $(git cat-file commit HEAD^ | grep squash | wc -l)
|
||||
echo 1 >expect &&
|
||||
git cat-file blob HEAD^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD^ >commit &&
|
||||
grep squash commit >actual &&
|
||||
test_line_count = 1 actual
|
||||
'
|
||||
|
||||
test_expect_success 'auto squash that matches longer sha1' '
|
||||
|
@ -160,15 +212,20 @@ test_expect_success 'auto squash that matches longer sha1' '
|
|||
echo 1 >file1 &&
|
||||
git add -u &&
|
||||
test_tick &&
|
||||
git commit -m "squash! $(git rev-parse --short=11 HEAD^)" &&
|
||||
oid=$(git rev-parse --short=11 HEAD^) &&
|
||||
git commit -m "squash! $oid" &&
|
||||
git tag final-longshasquash &&
|
||||
test_tick &&
|
||||
git rebase --autosquash -i HEAD^^^ &&
|
||||
git log --oneline >actual &&
|
||||
test_line_count = 3 actual &&
|
||||
git diff --exit-code final-longshasquash &&
|
||||
test 1 = "$(git cat-file blob HEAD^:file1)" &&
|
||||
test 1 = $(git cat-file commit HEAD^ | grep squash | wc -l)
|
||||
echo 1 >expect &&
|
||||
git cat-file blob HEAD^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD^ >commit &&
|
||||
grep squash commit >actual &&
|
||||
test_line_count = 1 actual
|
||||
'
|
||||
|
||||
test_auto_commit_flags () {
|
||||
|
@ -183,8 +240,12 @@ test_auto_commit_flags () {
|
|||
git log --oneline >actual &&
|
||||
test_line_count = 3 actual &&
|
||||
git diff --exit-code final-commit-$1 &&
|
||||
test 1 = "$(git cat-file blob HEAD^:file1)" &&
|
||||
test $2 = $(git cat-file commit HEAD^ | grep first | wc -l)
|
||||
echo 1 >expect &&
|
||||
git cat-file blob HEAD^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD^ >commit &&
|
||||
grep first commit >actual &&
|
||||
test_line_count = $2 actual
|
||||
}
|
||||
|
||||
test_expect_success 'use commit --fixup' '
|
||||
|
@ -210,11 +271,15 @@ test_auto_fixup_fixup () {
|
|||
(
|
||||
set_cat_todo_editor &&
|
||||
test_must_fail git rebase --autosquash -i HEAD^^^^ >actual &&
|
||||
head=$(git rev-parse --short HEAD) &&
|
||||
parent1=$(git rev-parse --short HEAD^) &&
|
||||
parent2=$(git rev-parse --short HEAD^^) &&
|
||||
parent3=$(git rev-parse --short HEAD^^^) &&
|
||||
cat >expected <<-EOF &&
|
||||
pick $(git rev-parse --short HEAD^^^) first commit
|
||||
$1 $(git rev-parse --short HEAD^) $1! first
|
||||
$1 $(git rev-parse --short HEAD) $1! $2! first
|
||||
pick $(git rev-parse --short HEAD^^) second commit
|
||||
pick $parent3 first commit
|
||||
$1 $parent1 $1! first
|
||||
$1 $head $1! $2! first
|
||||
pick $parent2 second commit
|
||||
EOF
|
||||
test_cmp expected actual
|
||||
) &&
|
||||
|
@ -222,13 +287,17 @@ test_auto_fixup_fixup () {
|
|||
git log --oneline >actual &&
|
||||
test_line_count = 3 actual
|
||||
git diff --exit-code "final-$1-$2" &&
|
||||
test 2 = "$(git cat-file blob HEAD^:file1)" &&
|
||||
echo 2 >expect &&
|
||||
git cat-file blob HEAD^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD^ >commit &&
|
||||
grep first commit >actual &&
|
||||
if test "$1" = "fixup"
|
||||
then
|
||||
test 1 = $(git cat-file commit HEAD^ | grep first | wc -l)
|
||||
test_line_count = 1 actual
|
||||
elif test "$1" = "squash"
|
||||
then
|
||||
test 3 = $(git cat-file commit HEAD^ | grep first | wc -l)
|
||||
test_line_count = 3 actual
|
||||
else
|
||||
false
|
||||
fi
|
||||
|
@ -256,19 +325,25 @@ test_expect_success C_LOCALE_OUTPUT 'autosquash with custom inst format' '
|
|||
echo 2 >file1 &&
|
||||
git add -u &&
|
||||
test_tick &&
|
||||
git commit -m "squash! $(git rev-parse --short HEAD^)" &&
|
||||
oid=$(git rev-parse --short HEAD^) &&
|
||||
git commit -m "squash! $oid" &&
|
||||
echo 1 >file1 &&
|
||||
git add -u &&
|
||||
test_tick &&
|
||||
git commit -m "squash! $(git log -n 1 --format=%s HEAD~2)" &&
|
||||
subject=$(git log -n 1 --format=%s HEAD~2) &&
|
||||
git commit -m "squash! $subject" &&
|
||||
git tag final-squash-instFmt &&
|
||||
test_tick &&
|
||||
git rebase --autosquash -i HEAD~4 &&
|
||||
git log --oneline >actual &&
|
||||
test_line_count = 3 actual &&
|
||||
git diff --exit-code final-squash-instFmt &&
|
||||
test 1 = "$(git cat-file blob HEAD^:file1)" &&
|
||||
test 2 = $(git cat-file commit HEAD^ | grep squash | wc -l)
|
||||
echo 1 >expect &&
|
||||
git cat-file blob HEAD^:file1 >actual &&
|
||||
test_cmp expect actual &&
|
||||
git cat-file commit HEAD^ >commit &&
|
||||
grep squash commit >actual &&
|
||||
test_line_count = 2 actual
|
||||
'
|
||||
|
||||
test_expect_success 'autosquash with empty custom instructionFormat' '
|
||||
|
|
|
@ -80,7 +80,8 @@ do_tests () {
|
|||
git commit -q -m "change big file again" &&
|
||||
git checkout -q other^{} &&
|
||||
git rebase master &&
|
||||
test_must_fail test -n "$(git rev-list master...HEAD~)"
|
||||
git rev-list master...HEAD~ >revs &&
|
||||
test_must_be_empty revs
|
||||
'
|
||||
|
||||
test_expect_success $pr 'do not drop patch' '
|
||||
|
|
|
@ -94,8 +94,10 @@ test_expect_success 'cherry-pick --rerere-autoupdate more than once' '
|
|||
|
||||
test_expect_success 'cherry-pick conflict without rerere' '
|
||||
test_config rerere.enabled false &&
|
||||
test_must_fail git cherry-pick master &&
|
||||
test_must_fail test_cmp expect foo
|
||||
test_must_fail git cherry-pick foo-master &&
|
||||
grep ===== foo &&
|
||||
grep foo-dev foo &&
|
||||
grep foo-master foo
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
|
@ -168,7 +168,7 @@ test_expect_success 'successful final commit clears cherry-pick state' '
|
|||
echo resolved >foo &&
|
||||
test_path_is_file .git/sequencer/todo &&
|
||||
git commit -a &&
|
||||
test_must_fail test_path_exists .git/sequencer
|
||||
test_path_is_missing .git/sequencer
|
||||
'
|
||||
|
||||
test_expect_success 'reset after final pick clears cherry-pick state' '
|
||||
|
@ -178,7 +178,7 @@ test_expect_success 'reset after final pick clears cherry-pick state' '
|
|||
echo resolved >foo &&
|
||||
test_path_is_file .git/sequencer/todo &&
|
||||
git reset &&
|
||||
test_must_fail test_path_exists .git/sequencer
|
||||
test_path_is_missing .git/sequencer
|
||||
'
|
||||
|
||||
test_expect_success 'failed cherry-pick produces dirty index' '
|
||||
|
@ -381,23 +381,23 @@ test_expect_success 'failed commit does not clear REVERT_HEAD' '
|
|||
'
|
||||
|
||||
test_expect_success 'successful final commit clears revert state' '
|
||||
pristine_detach picked-signed &&
|
||||
pristine_detach picked-signed &&
|
||||
|
||||
test_must_fail git revert picked-signed base &&
|
||||
echo resolved >foo &&
|
||||
test_path_is_file .git/sequencer/todo &&
|
||||
git commit -a &&
|
||||
test_must_fail test_path_exists .git/sequencer
|
||||
test_must_fail git revert picked-signed base &&
|
||||
echo resolved >foo &&
|
||||
test_path_is_file .git/sequencer/todo &&
|
||||
git commit -a &&
|
||||
test_path_is_missing .git/sequencer
|
||||
'
|
||||
|
||||
test_expect_success 'reset after final pick clears revert state' '
|
||||
pristine_detach picked-signed &&
|
||||
pristine_detach picked-signed &&
|
||||
|
||||
test_must_fail git revert picked-signed base &&
|
||||
echo resolved >foo &&
|
||||
test_path_is_file .git/sequencer/todo &&
|
||||
git reset &&
|
||||
test_must_fail test_path_exists .git/sequencer
|
||||
test_must_fail git revert picked-signed base &&
|
||||
echo resolved >foo &&
|
||||
test_path_is_file .git/sequencer/todo &&
|
||||
git reset &&
|
||||
test_path_is_missing .git/sequencer
|
||||
'
|
||||
|
||||
test_expect_success 'revert conflict, diff3 -m style' '
|
||||
|
|
|
@ -35,9 +35,15 @@ prepare_test_file () {
|
|||
}
|
||||
|
||||
apply_patch () {
|
||||
cmd_prefix= &&
|
||||
if test "x$1" = 'x!'
|
||||
then
|
||||
cmd_prefix=test_must_fail &&
|
||||
shift
|
||||
fi &&
|
||||
>target &&
|
||||
sed -e "s|\([ab]\)/file|\1/target|" <patch |
|
||||
git apply "$@"
|
||||
$cmd_prefix git apply "$@"
|
||||
}
|
||||
|
||||
test_fix () {
|
||||
|
@ -99,7 +105,7 @@ test_expect_success 'whitespace=warn, default rule' '
|
|||
|
||||
test_expect_success 'whitespace=error-all, default rule' '
|
||||
|
||||
test_must_fail apply_patch --whitespace=error-all &&
|
||||
apply_patch ! --whitespace=error-all &&
|
||||
test_must_be_empty target
|
||||
|
||||
'
|
||||
|
|
Loading…
Reference in New Issue