Skip to content

Commit 30aca41

Browse files
jnsnowstsquad
authored andcommitted
iotests/linters: Add workaround for mypy bug #9852
This one is insidious: if you write an import as "from {namespace} import {subpackage}" as mirror-top-perms (now) does, mypy will fail on every-other invocation *if* the package being imported is a typed, installed, namespace-scoped package. Upsettingly, that's exactly what 'qemu.[aqmp|qmp|machine]' et al are in the context of Python CI tests. Now, I could just edit mirror-top-perms to avoid this invocation, but since I tripped on a landmine, I might as well head it off at the pass and make sure nobody else trips on that same landmine. It seems to have something to do with the order in which files are checked as well, meaning the random order in which set(os.listdir()) produces the list of files to test will cause problems intermittently and not just strictly "every other run". This will be fixed in mypy >= 0.920, which is not released yet. The workaround for now is to disable incremental checking, which avoids the issue. Note: This workaround is not applied when running iotest 297 directly, because the bug does not surface there! Given the nature of CI jobs not starting with any stale cache to begin with, this really only has a half-second impact on manual runs of the Python test suite when executed directly by a developer on their local machine. The workaround may be removed when the Python package requirements can stipulate mypy 0.920 or higher, which can happen as soon as it is released. (Barring any unforseen compatibility issues that 0.920 may bring with it.) See also: python/mypy#11010 python/mypy#9852 Signed-off-by: John Snow <[email protected]> Reviewed-by: Hanna Reitz <[email protected]> Message-id: [email protected] Signed-off-by: John Snow <[email protected]>
1 parent c9013d1 commit 30aca41

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

tests/qemu-iotests/linters.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ def show_usage() -> None:
9393
if sys.argv[1] == '--pylint':
9494
run_linter('pylint', files)
9595
elif sys.argv[1] == '--mypy':
96-
run_linter('mypy', files)
96+
# mypy bug #9852; disable incremental checking as a workaround.
97+
args = ['--no-incremental'] + files
98+
run_linter('mypy', args)
9799
else:
98100
print(f"Unrecognized argument: '{sys.argv[1]}'", file=sys.stderr)
99101
show_usage()

0 commit comments

Comments
 (0)