| #!/usr/bin/env python3 |
| """Script for converting between cache formats. |
| |
| We support a filesystem tree based cache and a sqlite based cache. |
| See mypy/metastore.py for details. |
| """ |
| |
| from __future__ import annotations |
| |
| import os |
| import sys |
| |
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
| |
| import argparse |
| |
| from mypy.metastore import FilesystemMetadataStore, MetadataStore, SqliteMetadataStore |
| |
| |
| def main() -> None: |
| parser = argparse.ArgumentParser() |
| parser.add_argument( |
| "--to-sqlite", |
| action="store_true", |
| default=False, |
| help="Convert to a sqlite cache (default: convert from)", |
| ) |
| parser.add_argument( |
| "--output_dir", |
| action="store", |
| default=None, |
| help="Output cache location (default: same as input)", |
| ) |
| parser.add_argument("input_dir", help="Input directory for the cache") |
| args = parser.parse_args() |
| |
| input_dir = args.input_dir |
| output_dir = args.output_dir or input_dir |
| if args.to_sqlite: |
| input: MetadataStore = FilesystemMetadataStore(input_dir) |
| output: MetadataStore = SqliteMetadataStore(output_dir) |
| else: |
| input, output = SqliteMetadataStore(input_dir), FilesystemMetadataStore(output_dir) |
| |
| for s in input.list_all(): |
| if s.endswith(".json"): |
| assert output.write(s, input.read(s), input.getmtime(s)), "Failed to write cache file!" |
| output.commit() |
| |
| |
| if __name__ == "__main__": |
| main() |