Patchwork revset: add partial support for ancestor(wdir())

login
register
mail settings
Submitter Yuya Nishihara
Date June 30, 2018, 2:54 a.m.
Message ID <1a8d711aa48c9f42fdb6.1530327242@mimosa>
Download mbox | patch
Permalink /patch/32525/
State Accepted
Headers show

Comments

Yuya Nishihara - June 30, 2018, 2:54 a.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1530281603 -32400
#      Fri Jun 29 23:13:23 2018 +0900
# Node ID 1a8d711aa48c9f42fdb6b66886685b5d035e7d1e
# Parent  70f7552b82e5f30f9016de57bcd217dc8061c859
revset: add partial support for ancestor(wdir())

It's easy, so let's make it happen. I'm not certain if 'wdir() &' should
be required. ancestors(wdir()) works without it, but ancestor(wdir()) doesn't
as of now. That's the issue of fullreposet.__contains__() vs __and__().

Patch

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -319,8 +319,9 @@  def ancestor(repo, subset, x):
     for r in reviter:
         anc = anc.ancestor(repo[r])
 
-    if anc.rev() in subset:
-        return baseset([anc.rev()])
+    r = scmutil.intrev(anc)
+    if r in subset:
+        return baseset([r])
     return baseset()
 
 def _ancestors(repo, subset, x, followfirst=False, startdepth=None,
diff --git a/tests/test-revset.t b/tests/test-revset.t
--- a/tests/test-revset.t
+++ b/tests/test-revset.t
@@ -1813,6 +1813,16 @@  Test working-directory revision
   6
   7
   2147483647
+  $ hg debugrevspec '0:wdir() & ancestor(wdir())'
+  2147483647
+  $ hg debugrevspec '0:wdir() & ancestor(.:wdir())'
+  4
+  $ hg debugrevspec '0:wdir() & ancestor(wdir(), wdir())'
+  2147483647
+  $ hg debugrevspec '0:wdir() & ancestor(wdir(), tip)'
+  4
+  $ hg debugrevspec 'null:wdir() & ancestor(wdir(), null)'
+  -1
   $ hg debugrevspec 'wdir()~0'
   2147483647
   $ hg debugrevspec 'p1(wdir())'