Merge branch 'js/rebase-r-strategy'
"git rebase --rebase-merges" learned to drive different merge strategies and pass strategy specific options to them. * js/rebase-r-strategy: t3427: accelerate this test by using fast-export and fast-import rebase -r: do not (re-)generate root commits with `--root` *and* `--onto` t3418: test `rebase -r` with merge strategies t/lib-rebase: prepare for testing `git rebase --rebase-merges` rebase -r: support merge strategies other than `recursive` t3427: fix another incorrect assumption t3427: accommodate for the `rebase --merge` backend having been replaced t3427: fix erroneous assumption t3427: condense the unnecessarily repetitive test cases into three t3427: move the `filter-branch` invocation into the `setup` case t3427: simplify the `setup` test case significantly t3427: add a clarifying comment rebase: fold git-rebase--common into the -p backend sequencer: the `am` and `rebase--interactive` scripts are gone .gitignore: there is no longer a built-in `git-rebase--interactive` t3400: stop referring to the scripted rebase Drop unused git-rebase--am.sh
This commit is contained in:
18
sequencer.c
18
sequencer.c
@ -3364,6 +3364,9 @@ static int do_merge(struct repository *r,
|
||||
struct commit *head_commit, *merge_commit, *i;
|
||||
struct commit_list *bases, *j, *reversed = NULL;
|
||||
struct commit_list *to_merge = NULL, **tail = &to_merge;
|
||||
const char *strategy = !opts->xopts_nr &&
|
||||
(!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
|
||||
NULL : opts->strategy;
|
||||
struct merge_options o;
|
||||
int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
|
||||
static struct lock_file lock;
|
||||
@ -3516,7 +3519,7 @@ static int do_merge(struct repository *r,
|
||||
goto leave_merge;
|
||||
}
|
||||
|
||||
if (to_merge->next) {
|
||||
if (strategy || to_merge->next) {
|
||||
/* Octopus merge */
|
||||
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||
|
||||
@ -3530,7 +3533,14 @@ static int do_merge(struct repository *r,
|
||||
cmd.git_cmd = 1;
|
||||
argv_array_push(&cmd.args, "merge");
|
||||
argv_array_push(&cmd.args, "-s");
|
||||
argv_array_push(&cmd.args, "octopus");
|
||||
if (!strategy)
|
||||
argv_array_push(&cmd.args, "octopus");
|
||||
else {
|
||||
argv_array_push(&cmd.args, strategy);
|
||||
for (k = 0; k < opts->xopts_nr; k++)
|
||||
argv_array_pushf(&cmd.args,
|
||||
"-X%s", opts->xopts[k]);
|
||||
}
|
||||
argv_array_push(&cmd.args, "--no-edit");
|
||||
argv_array_push(&cmd.args, "--no-ff");
|
||||
argv_array_push(&cmd.args, "--no-log");
|
||||
@ -4554,6 +4564,7 @@ static int make_script_with_merges(struct pretty_print_context *pp,
|
||||
{
|
||||
int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
|
||||
int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
|
||||
int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
|
||||
struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
|
||||
struct strbuf label = STRBUF_INIT;
|
||||
struct commit_list *commits = NULL, **tail = &commits, *iter;
|
||||
@ -4720,7 +4731,8 @@ static int make_script_with_merges(struct pretty_print_context *pp,
|
||||
|
||||
if (!commit)
|
||||
strbuf_addf(out, "%s %s\n", cmd_reset,
|
||||
rebase_cousins ? "onto" : "[new root]");
|
||||
rebase_cousins || root_with_onto ?
|
||||
"onto" : "[new root]");
|
||||
else {
|
||||
const char *to = NULL;
|
||||
|
||||
|
Reference in New Issue
Block a user