[PATCH] rebase: add boolean config item rebase.norebasesource
Augie Fackler
raf at durin42.com
Wed May 4 18:11:38 UTC 2022
> On Apr 20, 2022, at 2:19 PM, C. Masloch <pushbx at ulukai.org> wrote:
>
> # HG changeset patch
> # User C. Masloch <pushbx at ulukai.org>
> # Date 1650475479 -7200
> # Wed Apr 20 19:24:39 2022 +0200
> # Node ID 4fd9ac0558249d24552b9efeed1ac77452c73319
> # Parent f45e1618cbf68aca4e72b6fed8dd2acef6f39a10
> rebase: add boolean config item rebase.norebasesource
>
> This allows to use rebase without recording a rebase_source extra
> field. This is useful for example to build a mirror converted from
> another SCM (such as svn) by converting only new revisions, and
> then incrementally add them to the destination by pulling from the
> newly converted (unrelated) repo and rebasing the new revisions
> onto the last old already stored changeset. Without this patch the
> rebased changesets would always receive some rebase_source that
> would depend on the particular history of the conversion process,
> instead of only depending on the original source revisions.
Interesting. An unusual process.
>
> This is used to implement a hg mirror repo of SvarDOS (a partially
> nonfree but completely redistributable DOS distribution) in the
> scripts at https://hg.pushbx.org/ecm/svardos.scr/
>
> In particular, cre.sh creates an svn mirror, upd.sh recreates an
> entire hg repo from the svn mirror (which takes too long to do in a
> regular job), and akt.sh uses hg convert with the config item
> convert.svn.startrev to incrementally convert only the two most
> recent revisions already found in the mirror destination plus any
> possible new revisions. If any are found, the temporary repo's
> changesets are pulled into the destination (as changesets from an
> unrelated repository). Then the changesets corresponding to the new
> revisions are rebased onto the prior final changeset. (Finally, the
> two remaining duplicates of the prior head and its parent are
> stripped from the destination repository.)
>
> Without this patch, the particular rebase_source extra field would
> depend on the order and times at which akt.sh was used, instead of
> only depending on the source repository. In other words, whatever
> sequence of upd.sh and akt.sh is used at whatever times, it is
> desired that the final output repositories always match each other
> exactly.
>
> diff --git a/hgext/rebase.py b/hgext/rebase.py
> --- a/hgext/rebase.py
> +++ b/hgext/rebase.py
> @@ -547,7 +547,10 @@
> date = self.date
> if date is None:
> date = ctx.date()
> - extra = {b'rebase_source': ctx.hex()}
> + if repo.ui.configbool(b'rebase', b'norebasesource'):
> + extra = {}
> + else:
> + extra = {b'rebase_source': ctx.hex()}
> for c in self.extrafns:
> c(ctx, extra)
> destphase = max(ctx.phase(), phases.draft)
> diff --git a/mercurial/configitems.py b/mercurial/configitems.py
> --- a/mercurial/configitems.py
> +++ b/mercurial/configitems.py
> @@ -2770,3 +2770,8 @@
> b'experimental.inmemory',
> default=False,
> )
> +coreconfigitem(
> + b'rebase',
> + b'norebasesource',
> + default=False,
> +)
Iâm basically fine with this, but:
1) could you add some description in a comment about what this does here
2) could you mark it as experimental=True so itâs hidden from mundane uses?
Thanks!
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list