diff mercurial/revset.py @ 12716:c7e619e30ba3

revset: add id() and rev() to allow explicitly referring to changes by hash or rev
author Augie Fackler <durin42@gmail.com>
date Mon, 11 Oct 2010 09:44:19 -0500
parents 33820dccbea4
children 098dfb2b7596
line wrap: on
line diff
--- a/mercurial/revset.py	Sun Oct 10 12:41:36 2010 -0500
+++ b/mercurial/revset.py	Mon Oct 11 09:44:19 2010 -0500
@@ -173,6 +173,23 @@
 
 # functions
 
+def node(repo, subset, x):
+    l = getargs(x, 1, 1, _("rev wants one argument"))
+    n = getstring(l[0], _("rev wants a string"))
+    if len(n) == 40:
+        rn = repo[n].rev()
+    else:
+        rn = repo.changelog.rev(repo.changelog._partialmatch(n))
+    return [r for r in subset if r == rn]
+
+def rev(repo, subset, x):
+    l = getargs(x, 1, 1, _("rev wants one argument"))
+    try:
+        l = int(getstring(l[0], _("rev wants a number")))
+    except ValueError:
+        raise error.ParseError(_("rev expects a number"))
+    return [r for r in subset if r == l]
+
 def p1(repo, subset, x):
     ps = set()
     cl = repo.changelog
@@ -501,6 +518,7 @@
     "min": minrev,
     "merge": merge,
     "modifies": modifies,
+    "id": node,
     "outgoing": outgoing,
     "p1": p1,
     "p2": p2,
@@ -508,6 +526,7 @@
     "present": present,
     "removes": removes,
     "reverse": reverse,
+    "rev": rev,
     "roots": roots,
     "sort": sort,
     "tag": tag,