Mercurial > evolve
comparison hgext3rd/topic/revset.py @ 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 | 95478db35f88 |
children | 5e71952c8b4a |
comparison
equal
deleted
inserted
replaced
5598:d1f6cf85bfec | 5602:e25394b6d021 |
---|---|
83 args = revset.getargs(x, 1, 1, b'ngtip takes one argument') | 83 args = revset.getargs(x, 1, 1, b'ngtip takes one argument') |
84 # match a specific topic | 84 # match a specific topic |
85 branch = revset.getstring(args[0], b'ngtip requires a string') | 85 branch = revset.getstring(args[0], b'ngtip requires a string') |
86 if branch == b'.': | 86 if branch == b'.': |
87 branch = repo[b'.'].branch() | 87 branch = repo[b'.'].branch() |
88 return subset & revset.baseset(destination.ngtip(repo, branch)) | 88 # list of length 1 |
89 revs = [repo[node].rev() for node in destination.ngtip(repo, branch)] | |
90 return subset & revset.baseset(revs) | |
89 | 91 |
90 @revsetpredicate(b'stack()') | 92 @revsetpredicate(b'stack()') |
91 def stackset(repo, subset, x): | 93 def stackset(repo, subset, x): |
92 """All relevant changes in the current topic, | 94 """All relevant changes in the current topic, |
93 | 95 |