Hello Ian,

I'm working my way through NOTES.git-debrebase-pseudomergehandling.

ISTM from your notes that the script will need four user subcommand:

1. strip pseudomerges and cleanup the branch, i.e., start or continue a
   debrebase

2. finish a debrebase by pseudo-merging the remote interchange branch

   This is what the `git debrebase prep-push` hook would do, but the
   user needs to be able to make it happen in order that they can
   publish a branch that fast-forwards from the result of `dgit clone`,
   without doing an upload.

3. start a `git rebase` onto a new upstream version

4. special command to protect pseudomerges that the user wants to keep

Users normally think of rebases as operations that are first started,
potentially interrupted by conflicts, and then finished.  We are fine
with (3), because this is just a wrapper around git-rebase(1) and users
know how to deal with its --continue, --skip and --abort options.

In the case of a debrebase, there will never be any conflicts to
resolve, but until (2) has occurred, the result strikes the user as
unfinished.  The workflow was sold to them as producing something that
is a ff of the interchange branch, but it isn't a ff of the interchange
branch yet.  They wonder "did I forget a --continue somewhere?"

How about calling (2) immediately after (1) -- and if there is a clean
way of doing it, after (3), too?  That way, the user can conceptualise
the debrebase operation as "make the history into a nice patch series,
and use a bit of magic to ensure that this is still fast-forwarding".
They don't have to try to understand the state before the final
pseudomerge is back on top.

-- 
Sean Whitton

Attachment: signature.asc
Description: PGP signature

Reply via email to