]> git.ipfire.org Git - thirdparty/git.git/commit - sequencer.h
sequencer: learn about the special "fake root commit" handling
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 3 May 2018 23:01:17 +0000 (01:01 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 6 May 2018 04:21:58 +0000 (13:21 +0900)
commitd87d48b2e033e8a8d39afbe7cb5eea331bbe47a6
tree3b774e0f02ae33eec7a874f73d863eb14434d958
parentba97aea1659e249a3a58ecc5f583ee2056a90ad8
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 <GIT_DIR>/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 <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
sequencer.h