[PATCH] revset: properly parse "descend" argument of followlines()

Denis Laxalde denis at laxalde.org
Fri Apr 14 17:22:30 UTC 2017


# HG changeset patch
# User Denis Laxalde <denis at laxalde.org>
# Date 1492188762 -7200
#      Fri Apr 14 18:52:42 2017 +0200
# Node ID 6b9fbf9d5196681d213d2a61ac2bed79c18e3a4c
# Parent  4c2c30bc38b4f84ce8f215146bbf158e299065b3
revset: properly parse "descend" argument of followlines()

We get "descend" symbol out of args dict (prior extraction by getargsdict
already checked that it is a symbol) and then parse it as a Boolean.

In tests, check for error cases and vary Boolean values here and there.

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -944,7 +944,12 @@ def followlines(repo, subset, x):
     fromline, toline = util.processlinerange(fromline, toline)
 
     fctx = repo[rev].filectx(fname)
-    if args.get('descend', False):
+    descend = False
+    if 'descend' in args:
+        descend = util.parsebool(getsymbol(args['descend']))
+        if descend is None:
+            raise error.ParseError(_("'descend' argument must be a Boolean"))
+    if descend:
         rs = generatorset(
             (c.rev() for c, _linerange
              in context.blockdescendants(fctx, fromline, toline)),
diff --git a/tests/test-annotate.t b/tests/test-annotate.t
--- a/tests/test-annotate.t
+++ b/tests/test-annotate.t
@@ -508,7 +508,7 @@ when they should.
   16: baz:0
   19: baz:3
   20: baz:4
-  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, descend=True, startrev=19)'
+  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, descend=true, startrev=19)'
   20: baz:4
   $ echo 6 >> baz
   $ hg ci -m 'added line 8'
@@ -516,12 +516,12 @@ when they should.
   16: baz:0
   19: baz:3
   20: baz:4
-  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19, descend=True)'
+  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19, descend=1)'
   20: baz:4
   $ sed 's/3/3+/' baz > baz.new
   $ mv baz.new baz
   $ hg ci -m 'baz:3->3+'
-  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7)'
+  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7, descend=0)'
   16: baz:0
   19: baz:3
   20: baz:4
@@ -529,7 +529,7 @@ when they should.
   $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19, descend=True)'
   20: baz:4
   23: baz:3->3+
-  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 1:2)'
+  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 1:2, descend=false)'
   21: added two lines with 0
 
 file patterns are okay
@@ -655,6 +655,12 @@ check error cases
   $ hg log -r 'followlines(baz, 2:40)'
   abort: line range exceeds file size
   [255]
+  $ hg log -r 'followlines(baz, 2:4, startrev=20, descend=[1])'
+  hg: parse error at 43: syntax error in revset 'followlines(baz, 2:4, startrev=20, descend=[1])'
+  [255]
+  $ hg log -r 'followlines(baz, 2:4, startrev=20, descend=a)'
+  hg: parse error: 'descend' argument must be a Boolean
+  [255]
 
 Test annotate with whitespace options
 


More information about the Mercurial-devel mailing list