Merge branch 'rr/revert-cherry-pick'
* rr/revert-cherry-pick: t3502, t3510: clarify cherry-pick -m failure t3510 (cherry-pick-sequencer): use exit status revert: simplify getting commit subject in format_todo() revert: tolerate extra spaces, tabs in insn sheet revert: make commit subjects in insn sheet optional revert: free msg in format_todo()
This commit is contained in:
@ -35,7 +35,7 @@ test_expect_success 'cherry-pick a non-merge with -m should fail' '
|
||||
|
||||
git reset --hard &&
|
||||
git checkout a^0 &&
|
||||
test_must_fail git cherry-pick -m 1 b &&
|
||||
test_expect_code 128 git cherry-pick -m 1 b &&
|
||||
git diff --exit-code a --
|
||||
|
||||
'
|
||||
|
@ -14,6 +14,9 @@ test_description='Test cherry-pick continuation features
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
# Repeat first match 10 times
|
||||
_r10='\1\1\1\1\1\1\1\1\1\1'
|
||||
|
||||
pristine_detach () {
|
||||
git cherry-pick --quit &&
|
||||
git checkout -f "$1^0" &&
|
||||
@ -43,7 +46,7 @@ test_expect_success setup '
|
||||
|
||||
test_expect_success 'cherry-pick persists data on failure' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick -s base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick -s base..anotherpick &&
|
||||
test_path_is_dir .git/sequencer &&
|
||||
test_path_is_file .git/sequencer/head &&
|
||||
test_path_is_file .git/sequencer/todo &&
|
||||
@ -64,7 +67,7 @@ test_expect_success 'cherry-pick mid-cherry-pick-sequence' '
|
||||
|
||||
test_expect_success 'cherry-pick persists opts correctly' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick -s -m 1 --strategy=recursive -X patience -X ours base..anotherpick &&
|
||||
test_expect_code 128 git cherry-pick -s -m 1 --strategy=recursive -X patience -X ours initial..anotherpick &&
|
||||
test_path_is_dir .git/sequencer &&
|
||||
test_path_is_file .git/sequencer/head &&
|
||||
test_path_is_file .git/sequencer/todo &&
|
||||
@ -104,7 +107,7 @@ test_expect_success '--abort requires cherry-pick in progress' '
|
||||
|
||||
test_expect_success '--quit cleans up sequencer state' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..picked &&
|
||||
test_expect_code 1 git cherry-pick base..picked &&
|
||||
git cherry-pick --quit &&
|
||||
test_path_is_missing .git/sequencer
|
||||
'
|
||||
@ -118,7 +121,7 @@ test_expect_success '--quit keeps HEAD and conflicted index intact' '
|
||||
:000000 100644 OBJID OBJID A foo
|
||||
:000000 100644 OBJID OBJID A unrelated
|
||||
EOF
|
||||
test_must_fail git cherry-pick base..picked &&
|
||||
test_expect_code 1 git cherry-pick base..picked &&
|
||||
git cherry-pick --quit &&
|
||||
test_path_is_missing .git/sequencer &&
|
||||
test_must_fail git update-index --refresh &&
|
||||
@ -132,7 +135,7 @@ test_expect_success '--quit keeps HEAD and conflicted index intact' '
|
||||
|
||||
test_expect_success '--abort to cancel multiple cherry-pick' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
git cherry-pick --abort &&
|
||||
test_path_is_missing .git/sequencer &&
|
||||
test_cmp_rev initial HEAD &&
|
||||
@ -142,7 +145,7 @@ test_expect_success '--abort to cancel multiple cherry-pick' '
|
||||
|
||||
test_expect_success '--abort to cancel single cherry-pick' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick picked &&
|
||||
test_expect_code 1 git cherry-pick picked &&
|
||||
git cherry-pick --abort &&
|
||||
test_path_is_missing .git/sequencer &&
|
||||
test_cmp_rev initial HEAD &&
|
||||
@ -152,7 +155,7 @@ test_expect_success '--abort to cancel single cherry-pick' '
|
||||
|
||||
test_expect_success 'cherry-pick --abort to cancel multiple revert' '
|
||||
pristine_detach anotherpick &&
|
||||
test_must_fail git revert base..picked &&
|
||||
test_expect_code 1 git revert base..picked &&
|
||||
git cherry-pick --abort &&
|
||||
test_path_is_missing .git/sequencer &&
|
||||
test_cmp_rev anotherpick HEAD &&
|
||||
@ -162,7 +165,7 @@ test_expect_success 'cherry-pick --abort to cancel multiple revert' '
|
||||
|
||||
test_expect_success 'revert --abort works, too' '
|
||||
pristine_detach anotherpick &&
|
||||
test_must_fail git revert base..picked &&
|
||||
test_expect_code 1 git revert base..picked &&
|
||||
git revert --abort &&
|
||||
test_path_is_missing .git/sequencer &&
|
||||
test_cmp_rev anotherpick HEAD
|
||||
@ -170,7 +173,7 @@ test_expect_success 'revert --abort works, too' '
|
||||
|
||||
test_expect_success '--abort to cancel single revert' '
|
||||
pristine_detach anotherpick &&
|
||||
test_must_fail git revert picked &&
|
||||
test_expect_code 1 git revert picked &&
|
||||
git revert --abort &&
|
||||
test_path_is_missing .git/sequencer &&
|
||||
test_cmp_rev anotherpick HEAD &&
|
||||
@ -181,7 +184,7 @@ test_expect_success '--abort to cancel single revert' '
|
||||
test_expect_success '--abort keeps unrelated change, easy case' '
|
||||
pristine_detach unrelatedpick &&
|
||||
echo changed >expect &&
|
||||
test_must_fail git cherry-pick picked..yetanotherpick &&
|
||||
test_expect_code 1 git cherry-pick picked..yetanotherpick &&
|
||||
echo changed >unrelated &&
|
||||
git cherry-pick --abort &&
|
||||
test_cmp expect unrelated
|
||||
@ -190,7 +193,7 @@ test_expect_success '--abort keeps unrelated change, easy case' '
|
||||
test_expect_success '--abort refuses to clobber unrelated change, harder case' '
|
||||
pristine_detach initial &&
|
||||
echo changed >expect &&
|
||||
test_must_fail git cherry-pick base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
echo changed >unrelated &&
|
||||
test_must_fail git cherry-pick --abort &&
|
||||
test_cmp expect unrelated &&
|
||||
@ -205,7 +208,7 @@ test_expect_success '--abort refuses to clobber unrelated change, harder case' '
|
||||
|
||||
test_expect_success 'cherry-pick still writes sequencer state when one commit is left' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..picked &&
|
||||
test_expect_code 1 git cherry-pick base..picked &&
|
||||
test_path_is_dir .git/sequencer &&
|
||||
echo "resolved" >foo &&
|
||||
git add foo &&
|
||||
@ -229,7 +232,7 @@ test_expect_success 'cherry-pick still writes sequencer state when one commit is
|
||||
|
||||
test_expect_success '--abort after last commit in sequence' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..picked &&
|
||||
test_expect_code 1 git cherry-pick base..picked &&
|
||||
git cherry-pick --abort &&
|
||||
test_path_is_missing .git/sequencer &&
|
||||
test_cmp_rev initial HEAD &&
|
||||
@ -239,22 +242,22 @@ test_expect_success '--abort after last commit in sequence' '
|
||||
|
||||
test_expect_success 'cherry-pick does not implicitly stomp an existing operation' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
test-chmtime -v +0 .git/sequencer >expect &&
|
||||
test_must_fail git cherry-pick unrelatedpick &&
|
||||
test_expect_code 128 git cherry-pick unrelatedpick &&
|
||||
test-chmtime -v +0 .git/sequencer >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '--continue complains when no cherry-pick is in progress' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick --continue
|
||||
test_expect_code 128 git cherry-pick --continue
|
||||
'
|
||||
|
||||
test_expect_success '--continue complains when there are unresolved conflicts' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..anotherpick &&
|
||||
test_must_fail git cherry-pick --continue
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
test_expect_code 128 git cherry-pick --continue
|
||||
'
|
||||
|
||||
test_expect_success '--continue of single cherry-pick' '
|
||||
@ -318,7 +321,7 @@ test_expect_success '--continue after resolving conflicts' '
|
||||
|
||||
test_expect_success '--continue after resolving conflicts and committing' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
echo "c" >foo &&
|
||||
git add foo &&
|
||||
git commit &&
|
||||
@ -368,7 +371,7 @@ test_expect_success 'follow advice and skip nil patch' '
|
||||
|
||||
test_expect_success '--continue respects opts' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick -x base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick -x base..anotherpick &&
|
||||
echo "c" >foo &&
|
||||
git add foo &&
|
||||
git commit &&
|
||||
@ -409,7 +412,7 @@ test_expect_success '--continue respects -x in first commit in multi-pick' '
|
||||
|
||||
test_expect_success '--signoff is not automatically propagated to resolved conflict' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick --signoff base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick --signoff base..anotherpick &&
|
||||
echo "c" >foo &&
|
||||
git add foo &&
|
||||
git commit &&
|
||||
@ -453,24 +456,24 @@ test_expect_success 'sign-off needs to be reaffirmed after conflict resolution,
|
||||
|
||||
test_expect_success 'malformed instruction sheet 1' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
echo "resolved" >foo &&
|
||||
git add foo &&
|
||||
git commit &&
|
||||
sed "s/pick /pick/" .git/sequencer/todo >new_sheet &&
|
||||
cp new_sheet .git/sequencer/todo &&
|
||||
test_must_fail git cherry-pick --continue
|
||||
test_expect_code 128 git cherry-pick --continue
|
||||
'
|
||||
|
||||
test_expect_success 'malformed instruction sheet 2' '
|
||||
pristine_detach initial &&
|
||||
test_must_fail git cherry-pick base..anotherpick &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
echo "resolved" >foo &&
|
||||
git add foo &&
|
||||
git commit &&
|
||||
sed "s/pick/revert/" .git/sequencer/todo >new_sheet &&
|
||||
cp new_sheet .git/sequencer/todo &&
|
||||
test_must_fail git cherry-pick --continue
|
||||
test_expect_code 128 git cherry-pick --continue
|
||||
'
|
||||
|
||||
test_expect_success 'empty commit set' '
|
||||
@ -478,4 +481,40 @@ test_expect_success 'empty commit set' '
|
||||
test_expect_code 128 git cherry-pick base..base
|
||||
'
|
||||
|
||||
test_expect_success 'malformed instruction sheet 3' '
|
||||
pristine_detach initial &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
echo "resolved" >foo &&
|
||||
git add foo &&
|
||||
git commit &&
|
||||
sed "s/pick \([0-9a-f]*\)/pick $_r10/" .git/sequencer/todo >new_sheet &&
|
||||
cp new_sheet .git/sequencer/todo &&
|
||||
test_expect_code 128 git cherry-pick --continue
|
||||
'
|
||||
|
||||
test_expect_success 'instruction sheet, fat-fingers version' '
|
||||
pristine_detach initial &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
echo "c" >foo &&
|
||||
git add foo &&
|
||||
git commit &&
|
||||
sed "s/pick \([0-9a-f]*\)/pick \1 /" .git/sequencer/todo >new_sheet &&
|
||||
cp new_sheet .git/sequencer/todo &&
|
||||
git cherry-pick --continue
|
||||
'
|
||||
|
||||
test_expect_success 'commit descriptions in insn sheet are optional' '
|
||||
pristine_detach initial &&
|
||||
test_expect_code 1 git cherry-pick base..anotherpick &&
|
||||
echo "c" >foo &&
|
||||
git add foo &&
|
||||
git commit &&
|
||||
cut -d" " -f1,2 .git/sequencer/todo >new_sheet &&
|
||||
cp new_sheet .git/sequencer/todo &&
|
||||
git cherry-pick --continue &&
|
||||
test_path_is_missing .git/sequencer &&
|
||||
git rev-list HEAD >commits &&
|
||||
test_line_count = 4 commits
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user