changeset 5602:e25394b6d021 stable

ngtip: fix TypeError: make revset from revs, not nodes (issue6405) This commit does two things: - Firstly, it tweaks the ngtip revset test to exercise the -G/--graph flag. This successfully triggers the bug when it is present. - Secondly, it changes the `ngtip` revset to return a revset made from integer revs instead of node hash bytes. The test now passes. Details: The TypeError was triggered by running hg log -r 'ngtip("default")' --graph in a repository with more than one changeset. The --graph tag caused the flow of control to call `reachableroots2` with the changeset ID found by the `ngtip` revset. Because the changeset ID was a node hash (bytes) instead of a rev (int), reachableroots2 raised the following error: TypeError: an integer is required (got type bytes)
author Sietse Brouwer <sbbrouwer@gmail.com>
date Wed, 07 Oct 2020 09:34:59 +0200
parents d1f6cf85bfec
children 5e71952c8b4a
files hgext3rd/topic/revset.py tests/test-topic-dest.t
diffstat 2 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/hgext3rd/topic/revset.py	Mon Oct 12 12:09:39 2020 +0200
+++ b/hgext3rd/topic/revset.py	Wed Oct 07 09:34:59 2020 +0200
@@ -85,7 +85,9 @@
     branch = revset.getstring(args[0], b'ngtip requires a string')
     if branch == b'.':
         branch = repo[b'.'].branch()
-    return subset & revset.baseset(destination.ngtip(repo, branch))
+    # list of length 1
+    revs = [repo[node].rev() for node in destination.ngtip(repo, branch)]
+    return subset & revset.baseset(revs)
 
 @revsetpredicate(b'stack()')
 def stackset(repo, subset, x):
--- a/tests/test-topic-dest.t	Mon Oct 12 12:09:39 2020 +0200
+++ b/tests/test-topic-dest.t	Wed Oct 07 09:34:59 2020 +0200
@@ -42,8 +42,10 @@
   |
   o  0 () c_alpha
   
-  $ hg log -r 'ngtip(.)'
-  3 () c_delta
+  $ hg log -G -r 'ngtip(.)'
+  o  3 () c_delta
+  |
+  ~
   $ hg log -r 'default'
   3 () c_delta