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

login
register
mail settings
Submitter phabricator
Date July 14, 2020, 3:33 p.m.
Message ID <differential-rev-PHID-DREV-nwztirzvg3cn5bibthla-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/46732/
State Superseded
Headers show

Comments

phabricator - July 14, 2020, 3:33 p.m.
mjacob created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION 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.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D8745

AFFECTED FILES
  mercurial/configitems.py
  mercurial/helptext/config.txt

CHANGE DETAILS




To: mjacob, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/mercurial/helptext/config.txt b/mercurial/helptext/config.txt
--- a/mercurial/helptext/config.txt
+++ b/mercurial/helptext/config.txt
@@ -1890,6 +1890,14 @@ 
     applicable for `hg amend`, `hg commit --amend` and `hg uncommit` in the
     current version.
 
+``empty-successor``
+
+    Control what happens with empty successors that are the result of rewrite
+    operations. If set to ``skip``, the successor is not created. If set to
+    ``keep``, the empty successor is created and kept.
+
+    Currently, no command considers this configuration. (EXPERIMENTAL)
+
 ``storage``
 -----------
 
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -1068,6 +1068,9 @@ 
     b'rewrite', b'update-timestamp', default=False,
 )
 coreconfigitem(
+    b'rewrite', b'empty-successor', default=b'skip', experimental=True,
+)
+coreconfigitem(
     b'storage', b'new-repo-backend', default=b'revlogv1', experimental=True,
 )
 coreconfigitem(