This is an archive of the discontinued Mercurial Phabricator instance.

config: add option to control creation of empty successors during rewrite
ClosedPublic

Authored by mjacob on Jul 14 2020, 11:32 AM.

Details

Summary

The default for many history-rewriting commands (e.g. rebase and absorb) is
that changesets which would become empty are not created in the target branch.
This makes sense if the source branch consists of small fix-up changes. For
more advanced workflows that make heavy use of history-editing to create
curated patch series, dropping empty changesets is not as important or even
undesirable.

Some users want to keep the meta-history, e.g. to make finding comments in a
code review tool easier or to avoid that divergent bookmarks are created. For
that, obsmarkers from the (to-be) empty changeset to the changeset(s) that
already made the changes should be added. If a to-be empty changeset is pruned
without a successor, adding the obsmarkers is hard because the changeset has to
be found within the hidden part of the history.

If rebasing in TortoiseHg, it’s easy to miss the fact that the to-be empty
changeset was pruned. An empty changeset will function as a reminder that
obsmarkers should be added.

Martin von Zweigbergk mentioned another advantage. Stripping the successor will
de-obsolete the predecessor. If no (empty) successor is created, this won’t be
possible.

In the future, we may want to consider other behaviors, like e.g. creating the
empty successor, but pruning it right away. Therefore this configuration
accepts 'skip' and 'keep' instead of being a boolean configuration.

Diff Detail

Repository
rHG Mercurial
Branch
default
Lint
No Linters Available
Unit
No Unit Test Coverage

Event Timeline

mjacob created this revision.Jul 14 2020, 11:32 AM
Alphare accepted this revision.Jul 15 2020, 11:03 AM
Alphare added a subscriber: Alphare.

I seems like a good idea, but pinging @marmoute on this since he might have more perspective on that subject.

I queued a mailing list version of this series. Should I drop it?

I queued a mailing list version of this series. Should I drop it?

The series from the mailing list is now in the main repository. The mailing list patch series and the stack in Phabricator is 100% identical except for the "Differential Revision: ..." lines. I’ve added the commits as "related objects" of the Phabricator revision. However, I’m unable to close the revisions as committed.

pulkit accepted this revision.Jul 17 2020, 2:34 PM
This revision is now accepted and ready to land.Jul 17 2020, 2:34 PM
mjacob closed this revision.Jul 17 2020, 2:36 PM