Submitter | C. Masloch |
---|---|
Date | April 20, 2022, 6:19 p.m. |
Message ID | <4fd9ac0558249d24552b.1650478799@ulukai.org> |
Download | mbox | patch |
Permalink | /patch/50937/ |
State | New |
Headers | show |
Comments
> On Apr 20, 2022, at 2:19 PM, C. Masloch <pushbx@ulukai.org> wrote: > > # HG changeset patch > # User C. Masloch <pushbx@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
Patch
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, +)