Mercurial > public > mercurial-scm > hg
diff hgext/convert/hg.py @ 19891:e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
The existing knobs for controlling which revisions to convert were often
insufficient. Revsets is a shiny hammer that provides a better solution.
Revsets has been introduced in --rev handling in a lot of other places while
being more or less backwards compatible. Doing the same here would be a much
more elegant ... but that would unfortunately not work in this case. "--rev 7"
used to mean revision 0 to 7 - it would be an unacceptable change if it
suddenly just meant revision 7.
Instead we introduce a new configuration setting. It will only work for
Mercurial repositories so adding a new commandline option for it would not be a
nice solution.
There is no way to use the fancy deprecation markup for configuration settings
so we just remove the documentation of hg.startrev.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Sat, 20 Jul 2013 00:43:08 +0200 |
parents | 9057855d8749 |
children | 45562379ce4e |
line wrap: on
line diff
--- a/hgext/convert/hg.py Thu Oct 03 18:01:21 2013 +0200 +++ b/hgext/convert/hg.py Sat Jul 20 00:43:08 2013 +0200 @@ -21,7 +21,7 @@ import os, time, cStringIO from mercurial.i18n import _ from mercurial.node import bin, hex, nullid -from mercurial import hg, util, context, bookmarks, error +from mercurial import hg, util, context, bookmarks, error, scmutil from common import NoRepo, commit, converter_source, converter_sink @@ -252,23 +252,37 @@ self.convertfp = None # Restrict converted revisions to startrev descendants startnode = ui.config('convert', 'hg.startrev') - if startnode is not None: - try: - startnode = self.repo.lookup(startnode) - except error.RepoError: - raise util.Abort(_('%s is not a valid start revision') - % startnode) - startrev = self.repo.changelog.rev(startnode) - children = {startnode: 1} - for r in self.repo.changelog.descendants([startrev]): - children[self.repo.changelog.node(r)] = 1 - self.keep = children.__contains__ + hgrevs = ui.config('convert', 'hg.revs') + if hgrevs is None: + if startnode is not None: + try: + startnode = self.repo.lookup(startnode) + except error.RepoError: + raise util.Abort(_('%s is not a valid start revision') + % startnode) + startrev = self.repo.changelog.rev(startnode) + children = {startnode: 1} + for r in self.repo.changelog.descendants([startrev]): + children[self.repo.changelog.node(r)] = 1 + self.keep = children.__contains__ + else: + self.keep = util.always + if rev: + self._heads = [self.repo[rev].node()] + else: + self._heads = self.repo.heads() else: - self.keep = util.always - if rev: - self._heads = [self.repo[rev].node()] - else: - self._heads = self.repo.heads() + if rev or startnode is not None: + raise util.Abort(_('hg.revs cannot be combined with ' + 'hg.startrev or --rev')) + nodes = set() + parents = set() + for r in scmutil.revrange(self.repo, [hgrevs]): + ctx = self.repo[r] + nodes.add(ctx.node()) + parents.update(p.node() for p in ctx.parents()) + self.keep = nodes.__contains__ + self._heads = nodes - parents def changectx(self, rev): if self.lastrev != rev: