This patch addresses https://github.com/gitgitgadget/git/issues/1156 . I have left builtin/merge.c unmodified since in its case, the original list is needed separately from its reverse copy. On Mon, Mar 14, 2022 at 1:36 PM JAYATI SHRIVASTAVA <gaurijove@xxxxxxxxx> wrote: > > From: JAYATI SHRIVASTAVA <gaurijove@xxxxxxxxx> > > Here, a reverse copy of the list is being created by looping and the > original list is no longer used by the code. Therefore, instead of creating a copy, > we can reverse the original list in-place using the reverse_commit_list helper > function a copy. > > Signed-off-by: JAYATI SHRIVASTAVA <gaurijove@xxxxxxxxx> > --- > sequencer.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) > > diff --git a/sequencer.c b/sequencer.c > index 35006c0cea..bccbb9e352 100644 > --- a/sequencer.c > +++ b/sequencer.c > @@ -3749,7 +3749,7 @@ static int do_merge(struct repository *r, > int run_commit_flags = 0; > struct strbuf ref_name = STRBUF_INIT; > struct commit *head_commit, *merge_commit, *i; > - struct commit_list *bases, *j, *reversed = NULL; > + struct commit_list *bases, *j; > struct commit_list *to_merge = NULL, **tail = &to_merge; > const char *strategy = !opts->xopts_nr && > (!opts->strategy || > @@ -3984,9 +3984,7 @@ static int do_merge(struct repository *r, > git_path_merge_head(r), 0); > write_message("no-ff", 5, git_path_merge_mode(r), 0); > > - for (j = bases; j; j = j->next) > - commit_list_insert(j->item, &reversed); > - free_commit_list(bases); > + bases = reverse_commit_list(bases); > > repo_read_index(r); > init_merge_options(&o, r); > @@ -4002,10 +4000,10 @@ static int do_merge(struct repository *r, > * update the index and working copy immediately. > */ > ret = merge_ort_recursive(&o, > - head_commit, merge_commit, reversed, > + head_commit, merge_commit, bases, > &i); > } else { > - ret = merge_recursive(&o, head_commit, merge_commit, reversed, > + ret = merge_recursive(&o, head_commit, merge_commit, bases, > &i); > } > if (ret <= 0) > -- > 2.35.1.455.g1a4874565f >