Commit e0b8738
committed
Fix incremental issue with namespace packages
Fixes #12664
A root cause is there is this stateful `_update_ns_ancestors` thing in
`modulefinder`, so if things get called in the wrong order, you can get
incorrect results.
See also the logic in `all_imported_modules_in_file` where we've fixed
several bugs like this previously, like #13124 and #10937
As a result of (seemingly accidentally) reusing imports across modules,
we can end up in a situation where the namespace gets added as a
dependency to other modules and so on the cached run we attempt to find
namespace before package, which does not work
I am not sure this `imports` code path is even needed, so I will open an
alternate PR.
I can't write a good test for this because it requires something in
site_packages, but here's a minimal repro:
```
set -eux
rm -rf repro
mkdir repro
cd repro
SITEPACK=env/site-packages
mkdir -p $SITEPACK
mkdir $SITEPACK/ruamel
mkdir $SITEPACK/ruamel/yaml
printf 'from ruamel.yaml.main import *' > $SITEPACK/ruamel/yaml/__init__.py
printf 'import ruamel.yaml' > $SITEPACK/ruamel/yaml/main.py
printf '' > $SITEPACK/ruamel/yaml/py.typed
printf 'import ruamel.yaml' > a.py
printf 'import a' > main.py
rm -rf .mypy_cache
PYTHONPATH=$SITEPACK mypy main.py
PYTHONPATH=$SITEPACK mypy main.py
```1 parent 60f00f3 commit e0b8738
1 file changed
+1
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
389 | 389 | | |
390 | 390 | | |
391 | 391 | | |
| 392 | + | |
392 | 393 | | |
393 | 394 | | |
394 | 395 | | |
| |||
0 commit comments