Make cherry-pick use rerere for conflict resolution.

Cherry-picking can be helped by reusing previous confliction
resolution by invoking rerere automatically.

Signed-off-by: Abhijit Menon-Sen <ams@toroid.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Abhijit Menon-Sen 2008-08-10 17:18:55 +05:30 committed by Junio C Hamano
parent ac39efbdf3
commit aa1a0111cc
2 changed files with 47 additions and 0 deletions

View File

@ -11,6 +11,7 @@
#include "cache-tree.h" #include "cache-tree.h"
#include "diff.h" #include "diff.h"
#include "revision.h" #include "revision.h"
#include "rerere.h"
/* /*
* This implements the builtins revert and cherry-pick. * This implements the builtins revert and cherry-pick.
@ -395,6 +396,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)
die ("Error wrapping up %s", defmsg); die ("Error wrapping up %s", defmsg);
fprintf(stderr, "Automatic %s failed.%s\n", fprintf(stderr, "Automatic %s failed.%s\n",
me, help_msg(commit->object.sha1)); me, help_msg(commit->object.sha1));
rerere();
exit(1); exit(1);
} }
if (commit_lock_file(&msg_file) < 0) if (commit_lock_file(&msg_file) < 0)

45
t/t3504-cherry-pick-rerere.sh Executable file
View File

@ -0,0 +1,45 @@
#!/bin/sh
test_description='cherry-pick should rerere for conflicts'
. ./test-lib.sh
test_expect_success setup '
echo foo >foo &&
git add foo && test_tick && git commit -q -m 1 &&
echo foo-master >foo &&
git add foo && test_tick && git commit -q -m 2 &&
git checkout -b dev HEAD^ &&
echo foo-dev >foo &&
git add foo && test_tick && git commit -q -m 3 &&
git config rerere.enabled true
'
test_expect_success 'conflicting merge' '
test_must_fail git merge master
'
test_expect_success 'fixup' '
echo foo-dev >foo &&
git add foo && test_tick && git commit -q -m 4 &&
git reset --hard HEAD^
echo foo-dev >expect
'
test_expect_success 'cherry-pick conflict' '
test_must_fail git cherry-pick master &&
test_cmp expect foo
'
test_expect_success 'reconfigure' '
git config rerere.enabled false
git reset --hard
'
test_expect_success 'cherry-pick conflict without rerere' '
test_must_fail git cherry-pick master &&
test_must_fail test_cmp expect foo
'
test_done