[PATCH] rebase: remove experimental option from 'rebase' config section

Pierre-Yves David pierre-yves.david at ens-lyon.org
Sun Feb 28 04:02:43 EST 2016



On 02/27/2016 08:23 PM, Martin von Zweigbergk wrote:
> See
> http://thread.gmane.org/gmane.comp.version-control.mercurial.devel/87877/focus=87881

See my changeset description.

TL;DR;
  * related to evolution → fine to live in experimental,
  * not in its final foram → should live in experimental
    (https://www.youtube.com/watch?v=6h0GRhIKgD8)
  * will not be limited to rebase → should not be in 'rebase' config,
  * (there was no such thing as a rebase config section)

> On Sat, Feb 27, 2016, 10:02 Pierre-Yves David
> <pierre-yves.david at ens-lyon.org <mailto:pierre-yves.david at ens-lyon.org>>
> wrote:
>
>     # HG changeset patch
>     # User Pierre-Yves David <pierre-yves.david at fb.com
>     <mailto:pierre-yves.david at fb.com>>
>     # Date 1456592532 -3600
>     #      Sat Feb 27 18:02:12 2016 +0100
>     # Node ID 5000a7efef468a32e4e0b2d26a5ed2dfe75229f4
>     # Parent  41dcd754526612c43b9695df8851557c851828ef
>     # Available At http://hg.netv6.net/marmoute-wip/mercurial/
>     #              hg pull http://hg.netv6.net/marmoute-wip/mercurial/
>     -r 5000a7efef46
>     rebase: remove experimental option from 'rebase' config section
>
>     Changeset f0e9f38d250f introduced a guard against case where
>     obsolete changesets
>     are included in the rebase in a way this will result in divergence
>     (because
>     rebase create new successors for changeset which already have
>     successors). In
>     the same go a 'rebase.allowdivergence' option was introduced to
>     control that
>     behavior.
>
>     We rename this config option to 'experimental.allowdivergence' for
>     multiple
>     reasons:
>
>     * First this behavior is attached to changeset evolution, a feature
>     still
>       experimental.
>
>     * Second, there was no 'rebase' section in config before we
>     introduced this
>        option. I would like to avoid proliferation of micro config
>     section and
>        therefore would like to avoid the creation of this new section
>     just for an
>        experimental feature.
>
>     * Third, this guard (warning the user about a history rewriting
>     operation that
>        will create divergence) will very likely be generalised to all
>     history
>        rewriting operations, making this not rebase specific.
>
>     * Finally, because this will likely be a general guard present a bit
>     everywhere
>        in the UI we'll likely end up with something better than a config
>     option to
>        control this behavior, so having the current config option living in
>        experimental will allow us make it disappear in the future.
>
>     So we banish this config option back to the experimental section
>     where it
>     belongs, killing the newly born 'rebase' config section in the process.
>
>     diff --git a/hgext/rebase.py b/hgext/rebase.py
>     --- a/hgext/rebase.py
>     +++ b/hgext/rebase.py
>     @@ -304,21 +304,21 @@ def rebase(ui, repo, **opts):
>
>       rebaseobsrevs,
>                                                                       dest)
>                       rebaseobsskipped = set(obsoletenotrebased)
>
>                       # Obsolete node with successors not in dest leads
>     to divergence
>     -                divergenceok = ui.configbool('rebase',
>     +                divergenceok = ui.configbool('experimental',
>                                                    'allowdivergence')
>                       divergencebasecandidates = rebaseobsrevs -
>     rebaseobsskipped
>
>                       if divergencebasecandidates and not divergenceok:
>                           divhashes = (str(repo[r])
>                                        for r in divergencebasecandidates)
>                           msg = _("this rebase will cause "
>                                   "divergences from: %s")
>                           h = _("to force the rebase please set "
>     -                          "rebase.allowdivergence=True")
>     +                          "experimental.allowdivergence=True")
>                           raise error.Abort(msg %
>     (",".join(divhashes),), hint=h)
>
>                       # - plain prune (no successor) changesets are rebased
>                       # - split changesets are not rebased if at least
>     one of the
>                       # changeset resulting from the split is an
>     ancestor of dest
>     diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t
>     --- a/tests/test-rebase-obsolete.t
>     +++ b/tests/test-rebase-obsolete.t
>     @@ -770,11 +770,11 @@ If a rebase is going to create divergenc
>         update: 2 new changesets, 3 branch heads (merge)
>         phases: 8 draft
>         unstable: 1 changesets
>         $ hg rebase -s 10 -d 12
>         abort: this rebase will cause divergences from: 121d9e3bc4c6
>     -  (to force the rebase please set rebase.allowdivergence=True)
>     +  (to force the rebase please set experimental.allowdivergence=True)
>         [255]
>         $ hg log -G
>         @  15:73568ab6879d bar foo
>         |
>         | o  14:77d874d096a2 10'
>     @@ -789,13 +789,13 @@ If a rebase is going to create divergenc
>         |
>         o  2:261e70097290 B2
>         |
>         o  0:4a2df7238c3b A
>
>     -With rebase.allowdivergence=True, rebase can create divergence
>     +With experimental.allowdivergence=True, rebase can create divergence
>
>     -  $ hg rebase -s 10 -d 12 --config rebase.allowdivergence=True
>     +  $ hg rebase -s 10 -d 12 --config experimental.allowdivergence=True
>         rebasing 10:121d9e3bc4c6 "P"
>         rebasing 15:73568ab6879d "bar foo" (tip)
>         $ hg summary
>         parent: 17:61bd55f69bc4 tip
>          bar foo
>     _______________________________________________
>     Mercurial-devel mailing list
>     Mercurial-devel at mercurial-scm.org
>     <mailto:Mercurial-devel at mercurial-scm.org>
>     https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list