D7271: linelog: be more careful about types before looking for _target attribute
durin42 (Augie Fackler)
phabricator at mercurial-scm.org
Wed Nov 6 22:57:40 UTC 2019
durin42 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D7271
AFFECTED FILES
mercurial/linelog.py
CHANGE DETAILS
diff --git a/mercurial/linelog.py b/mercurial/linelog.py
--- a/mercurial/linelog.py
+++ b/mercurial/linelog.py
@@ -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(
To: durin42, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list