[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