Don't create .mypy_cache directory when --no-incremental is used#20833
Don't create .mypy_cache directory when --no-incremental is used#20833Fridayai700 wants to merge 1 commit intopython:masterfrom
Conversation
When running mypy with --no-incremental, the .mypy_cache directory was still being created. This happened because the metadata store was initialized unconditionally, and the filesystem/sqlite stores create the cache directory during initialization or on first write. The fix creates a no-op FilesystemMetadataStore backed by os.devnull when incremental mode is disabled, which prevents any cache directory creation or file writes. Both FilesystemMetadataStore and SqliteMetadataStore already handle os.devnull as a no-op case, so this approach is consistent with the existing --cache-dir=/dev/null behavior. Fixes python#19489
|
The fix for this is a documentation update, not a code change. |
|
I see your point — we could document that That said, I think the code change better matches user expectations. The current behavior is confusing: you explicitly tell mypy not to use incremental mode, and it still writes a directory full of cache files to your project. The documented workaround ( The fix is minimal — it uses the same devnull-backed store that But if the mypy team prefers a docs-only approach, I'm happy to update the PR to document the behavior instead. What do the other maintainers think? |
Summary
When running mypy with
--no-incremental, the.mypy_cachedirectory is still created, even though the help text implies it won't be:Root cause
The metadata store (which manages the cache directory) is initialized unconditionally in
BuildManager.__init__(). While thecache_enabledflag prevents cache reads, the store still creates the cache directory on init (for SQLite stores) or on first write (for filesystem stores).Fix
When
options.incrementalis False,create_metastore()now returns a no-opFilesystemMetadataStorebacked byos.devnull. Both store implementations already handleos.devnullas a no-op — this is the same behavior users get with--cache-dir /dev/null, which was the documented workaround.After:
Test plan
--no-incrementalno longer creates.mypy_cachepython -m pytest mypy/test/testcheck.py -k "testNoIncremental or testIncremental" -o "addopts="— all passFixes #19489