cherry-pick/revert: remember --rerere-autoupdate
When continuing after conflicts, cherry-pick forgot if the user had specified '--rerere-autoupdate'. Redo the cherry-pick rerere tests to check --rerere-autoupdate works as expected. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
6f0e577e46
commit
8d8cb4b047
10
sequencer.c
10
sequencer.c
@ -1439,7 +1439,11 @@ static int populate_opts_cb(const char *key, const char *value, void *data)
|
|||||||
else if (!strcmp(key, "options.strategy-option")) {
|
else if (!strcmp(key, "options.strategy-option")) {
|
||||||
ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
|
ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
|
||||||
opts->xopts[opts->xopts_nr++] = xstrdup(value);
|
opts->xopts[opts->xopts_nr++] = xstrdup(value);
|
||||||
} else
|
} else if (!strcmp(key, "options.allow-rerere-auto"))
|
||||||
|
opts->allow_rerere_auto =
|
||||||
|
git_config_bool_or_int(key, value, &error_flag) ?
|
||||||
|
RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
|
||||||
|
else
|
||||||
return error(_("invalid key: %s"), key);
|
return error(_("invalid key: %s"), key);
|
||||||
|
|
||||||
if (!error_flag)
|
if (!error_flag)
|
||||||
@ -1752,6 +1756,10 @@ static int save_opts(struct replay_opts *opts)
|
|||||||
"options.strategy-option",
|
"options.strategy-option",
|
||||||
opts->xopts[i], "^$", 0);
|
opts->xopts[i], "^$", 0);
|
||||||
}
|
}
|
||||||
|
if (opts->allow_rerere_auto)
|
||||||
|
res |= git_config_set_in_file_gently(opts_file, "options.allow-rerere-auto",
|
||||||
|
opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
|
||||||
|
"true" : "false");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,9 +7,11 @@ test_description='cherry-pick should rerere for conflicts'
|
|||||||
test_expect_success setup '
|
test_expect_success setup '
|
||||||
test_commit foo &&
|
test_commit foo &&
|
||||||
test_commit foo-master foo &&
|
test_commit foo-master foo &&
|
||||||
|
test_commit bar-master bar &&
|
||||||
|
|
||||||
git checkout -b dev foo &&
|
git checkout -b dev foo &&
|
||||||
test_commit foo-dev foo &&
|
test_commit foo-dev foo &&
|
||||||
|
test_commit bar-dev bar &&
|
||||||
git config rerere.enabled true
|
git config rerere.enabled true
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -19,22 +21,66 @@ test_expect_success 'conflicting merge' '
|
|||||||
|
|
||||||
test_expect_success 'fixup' '
|
test_expect_success 'fixup' '
|
||||||
echo foo-resolved >foo &&
|
echo foo-resolved >foo &&
|
||||||
|
echo bar-resolved >bar &&
|
||||||
git commit -am resolved &&
|
git commit -am resolved &&
|
||||||
cp foo expect &&
|
cp foo foo-expect &&
|
||||||
|
cp bar bar-expect &&
|
||||||
git reset --hard HEAD^
|
git reset --hard HEAD^
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'cherry-pick conflict' '
|
test_expect_success 'cherry-pick conflict with --rerere-autoupdate' '
|
||||||
test_must_fail git cherry-pick master &&
|
test_must_fail git cherry-pick --rerere-autoupdate foo..bar-master &&
|
||||||
test_cmp expect foo
|
test_cmp foo-expect foo &&
|
||||||
|
git diff-files --quiet &&
|
||||||
|
test_must_fail git cherry-pick --continue &&
|
||||||
|
test_cmp bar-expect bar &&
|
||||||
|
git diff-files --quiet &&
|
||||||
|
git cherry-pick --continue &&
|
||||||
|
git reset --hard bar-dev
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'reconfigure' '
|
test_expect_success 'cherry-pick conflict repsects rerere.autoUpdate' '
|
||||||
git config rerere.enabled false &&
|
test_config rerere.autoUpdate true &&
|
||||||
git reset --hard
|
test_must_fail git cherry-pick foo..bar-master &&
|
||||||
|
test_cmp foo-expect foo &&
|
||||||
|
git diff-files --quiet &&
|
||||||
|
test_must_fail git cherry-pick --continue &&
|
||||||
|
test_cmp bar-expect bar &&
|
||||||
|
git diff-files --quiet &&
|
||||||
|
git cherry-pick --continue &&
|
||||||
|
git reset --hard bar-dev
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cherry-pick conflict with --no-rerere-autoupdate' '
|
||||||
|
test_config rerere.autoUpdate true &&
|
||||||
|
test_must_fail git cherry-pick --no-rerere-autoupdate foo..bar-master &&
|
||||||
|
test_cmp foo-expect foo &&
|
||||||
|
test_must_fail git diff-files --quiet &&
|
||||||
|
git add foo &&
|
||||||
|
test_must_fail git cherry-pick --continue &&
|
||||||
|
test_cmp bar-expect bar &&
|
||||||
|
test_must_fail git diff-files --quiet &&
|
||||||
|
git add bar &&
|
||||||
|
git cherry-pick --continue &&
|
||||||
|
git reset --hard bar-dev
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cherry-pick --rerere-autoupdate more than once' '
|
||||||
|
test_must_fail git cherry-pick --rerere-autoupdate --rerere-autoupdate foo..bar-master &&
|
||||||
|
test_cmp foo-expect foo &&
|
||||||
|
git diff-files --quiet &&
|
||||||
|
git cherry-pick --abort &&
|
||||||
|
test_must_fail git cherry-pick --rerere-autoupdate --no-rerere-autoupdate --rerere-autoupdate foo..bar-master &&
|
||||||
|
test_cmp foo-expect foo &&
|
||||||
|
git diff-files --quiet &&
|
||||||
|
git cherry-pick --abort &&
|
||||||
|
test_must_fail git cherry-pick --rerere-autoupdate --no-rerere-autoupdate foo..bar-master &&
|
||||||
|
test_must_fail git diff-files --quiet &&
|
||||||
|
git cherry-pick --abort
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'cherry-pick conflict without rerere' '
|
test_expect_success 'cherry-pick conflict without rerere' '
|
||||||
|
test_config rerere.enabled false &&
|
||||||
test_must_fail git cherry-pick master &&
|
test_must_fail git cherry-pick master &&
|
||||||
test_must_fail test_cmp expect foo
|
test_must_fail test_cmp expect foo
|
||||||
'
|
'
|
||||||
|
Loading…
Reference in New Issue
Block a user