Mercurial > hg
changeset 43473:14e374d4c9ee
linelog: be more careful about types before looking for _target attribute
Without this, pytype (correctly) complains that fakejge might not have
a _cmprev attribute. We're operating on some constraints not
expressible in the type system, so we detect the invalid case and
raise a nicer exception now.
Sadly, we also need an `assert` to give PyType a clue that we know
what we're doing, but I can absolutely live with that.
Differential Revision: https://phab.mercurial-scm.org/D7271
author | Augie Fackler <augie@google.com> |
---|---|
date | Wed, 06 Nov 2019 14:12:53 -0500 |
parents | acc4047c2194 |
children | 70d42e2ad9b4 |
files | mercurial/linelog.py |
diffstat | 1 files changed, 7 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/linelog.py Wed Nov 06 14:11:29 2019 -0500 +++ b/mercurial/linelog.py Wed Nov 06 14:12:53 2019 -0500 @@ -278,8 +278,14 @@ fakejge = _decodeone(buf, 0) if isinstance(fakejge, _jump): maxrev = 0 + elif isinstance(fakejge, (_jge, _jl)): + maxrev = fakejge._cmprev else: - maxrev = fakejge._cmprev + raise LineLogError( + 'Expected one of _jump, _jge, or _jl. Got %s.' + % type(fakejge).__name__ + ) + assert isinstance(fakejge, (_jump, _jge, _jl)) # help pytype numentries = fakejge._target if expected != numentries: raise LineLogError(