diff tests/test-annotate.t @ 31955:4c2c30bc38b4

context: follow all branches in blockdescendants() In the initial implementation of blockdescendants (and thus followlines(..., descend=True) revset), only the first branch encountered in descending direction was followed. Update the algorithm so that all children of a revision ('x' in code) are considered. Accordingly, we need to prevent a child revision to be yielded multiple times when it gets visited through different path, so we skip 'i' when this occurs. Finally, since we now consider all parents of a possible child touching a given line range, we take care of yielding the child if it has a diff in specified line range with at least one of its parent (same logic as blockancestors()).
author Denis Laxalde <denis@laxalde.org>
date Fri, 14 Apr 2017 08:55:18 +0200
parents 5e3b49defbff
children 55987fc8aba1
line wrap: on
line diff
--- a/tests/test-annotate.t	Thu Apr 13 08:27:19 2017 -0700
+++ b/tests/test-annotate.t	Fri Apr 14 08:55:18 2017 +0200
@@ -600,7 +600,28 @@
   $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 5:7, startrev=25, descend=True)'
   26: baz:3+->3-
 
+we follow all branches in descending direction
+  $ hg up 22 --quiet
+  $ sed 's/3/+3/' baz > baz.new
+  $ mv baz.new baz
+  $ hg ci -m 'baz:3->+3'
+  created new head
+  $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=16, descend=True)' --graph
+  @  29: baz:3->+3
+  :
+  : o  26: baz:3+->3-
+  : :
+  : o  23: baz:3->3+
+  :/
+  o    20: baz:4
+  |\
+  | ~
+  o  19: baz:3
+  |
+  ~
+
 check error cases
+  $ hg up 23 --quiet
   $ hg log -r 'followlines()'
   hg: parse error: followlines takes at least 1 positional arguments
   [255]