# HG changeset patch # User Sietse Brouwer # Date 1602056099 -7200 # Node ID e25394b6d021db5160db688ce760380a470463da # Parent d1f6cf85bfec8da28bc5af7269958101072ff274 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) diff -r d1f6cf85bfec -r e25394b6d021 hgext3rd/topic/revset.py --- 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): diff -r d1f6cf85bfec -r e25394b6d021 tests/test-topic-dest.t --- 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