diff mercurial/cmdutil.py @ 14319:b33f3e35efb0

scmutil: move revsingle/pair/range from cmdutil This allows users at levels below the command layer to avoid import loops.
author Matt Mackall <mpm@selenic.com>
date Fri, 13 May 2011 14:06:28 -0500
parents 2daa5179e73f
children 3438417a6657
line wrap: on
line diff
--- a/mercurial/cmdutil.py	Fri May 13 12:57:27 2011 -0500
+++ b/mercurial/cmdutil.py	Fri May 13 14:06:28 2011 -0500
@@ -10,7 +10,7 @@
 import os, sys, errno, re, tempfile
 import util, scmutil, templater, patch, error, templatekw, wdutil
 import match as matchmod
-import revset, subrepo
+import subrepo
 
 expandpats = wdutil.expandpats
 match = wdutil.match
@@ -19,8 +19,6 @@
 addremove = wdutil.addremove
 dirstatecopy = wdutil.dirstatecopy
 
-revrangesep = ':'
-
 def parsealiases(cmd):
     return cmd.lstrip("^").split("|")
 
@@ -118,77 +116,6 @@
         limit = None
     return limit
 
-def revsingle(repo, revspec, default='.'):
-    if not revspec:
-        return repo[default]
-
-    l = revrange(repo, [revspec])
-    if len(l) < 1:
-        raise util.Abort(_('empty revision set'))
-    return repo[l[-1]]
-
-def revpair(repo, revs):
-    if not revs:
-        return repo.dirstate.p1(), None
-
-    l = revrange(repo, revs)
-
-    if len(l) == 0:
-        return repo.dirstate.p1(), None
-
-    if len(l) == 1:
-        return repo.lookup(l[0]), None
-
-    return repo.lookup(l[0]), repo.lookup(l[-1])
-
-def revrange(repo, revs):
-    """Yield revision as strings from a list of revision specifications."""
-
-    def revfix(repo, val, defval):
-        if not val and val != 0 and defval is not None:
-            return defval
-        return repo.changelog.rev(repo.lookup(val))
-
-    seen, l = set(), []
-    for spec in revs:
-        # attempt to parse old-style ranges first to deal with
-        # things like old-tag which contain query metacharacters
-        try:
-            if isinstance(spec, int):
-                seen.add(spec)
-                l.append(spec)
-                continue
-
-            if revrangesep in spec:
-                start, end = spec.split(revrangesep, 1)
-                start = revfix(repo, start, 0)
-                end = revfix(repo, end, len(repo) - 1)
-                step = start > end and -1 or 1
-                for rev in xrange(start, end + step, step):
-                    if rev in seen:
-                        continue
-                    seen.add(rev)
-                    l.append(rev)
-                continue
-            elif spec and spec in repo: # single unquoted rev
-                rev = revfix(repo, spec, None)
-                if rev in seen:
-                    continue
-                seen.add(rev)
-                l.append(rev)
-                continue
-        except error.RepoLookupError:
-            pass
-
-        # fall through to new-style queries if old-style fails
-        m = revset.match(repo.ui, spec)
-        for r in m(repo, range(len(repo))):
-            if r not in seen:
-                l.append(r)
-        seen.update(l)
-
-    return l
-
 def makefilename(repo, pat, node,
                   total=None, seqno=None, revwidth=None, pathname=None):
     node_expander = {
@@ -974,7 +901,7 @@
         defrange = '%s:0' % repo['.'].rev()
     else:
         defrange = '-1:0'
-    revs = revrange(repo, opts['rev'] or [defrange])
+    revs = scmutil.revrange(repo, opts['rev'] or [defrange])
     if not revs:
         return []
     wanted = set()