> On Apr 20, 2022, at 2:19 PM, C. Masloch <pus...@ulukai.org> wrote: > > # HG changeset patch > # User C. Masloch <pus...@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@mercurial-scm.org > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel