From d87d48b2e033e8a8d39afbe7cb5eea331bbe47a6 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 4 May 2018 01:01:17 +0200 Subject: sequencer: learn about the special "fake root commit" handling When an interactive rebase wants to recreate a root commit, it - first creates a new, empty root commit, - checks it out, - converts the next `pick` command so that it amends the empty root commit Introduce support in the sequencer to handle such an empty root commit, by looking for the file /rebase-merge/squash-onto; if it exists and contains a commit name, the sequencer will compare the HEAD to said root commit, and if identical, a new root commit will be created. While converting scripted code into proper, portable C, we also do away with the old "amend with an empty commit message, then cherry-pick without committing, then amend again" dance and replace it with code that uses the internal API properly to do exactly what we want: create a new root commit. To keep the implementation simple, we always spawn `git commit` to create new root commits. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- sequencer.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'sequencer.h') diff --git a/sequencer.h b/sequencer.h index d9570d92b1..4b2717881f 100644 --- a/sequencer.h +++ b/sequencer.h @@ -44,6 +44,10 @@ struct replay_opts { char **xopts; size_t xopts_nr, xopts_alloc; + /* placeholder commit for -i --root */ + struct object_id squash_onto; + int have_squash_onto; + /* Only used by REPLAY_NONE */ struct rev_info *revs; }; -- cgit v1.3