| #!/usr/bin/env python3 | |
| # | |
| # SPDX-License-Identifier: GPL-2.0-or-later | |
| # | |
| """Delete stale assets from the download cache of the functional tests""" | |
| import os | |
| import stat | |
| import sys | |
| import time | |
| from pathlib import Path | |
| cache_dir_env = os.getenv('QEMU_TEST_CACHE_DIR') | |
| if cache_dir_env: | |
| cache_dir = Path(cache_dir_env, "download") | |
| else: | |
| cache_dir = Path(Path("~").expanduser(), ".cache", "qemu", "download") | |
| if not cache_dir.exists(): | |
| print(f"Cache dir {cache_dir} does not exist!", file=sys.stderr) | |
| sys.exit(1) | |
| os.chdir(cache_dir) | |
| for file in cache_dir.iterdir(): | |
| # Only consider the files that use a sha256 as filename: | |
| if len(file.name) != 64: | |
| continue | |
| stampfile = file.with_suffix(".stamp") | |
| try: | |
| timestamp = int(stampfile.read_text()) | |
| except FileNotFoundError: | |
| # Assume it's an old file that was already in the cache before we | |
| # added the code for evicting stale assets. Use the release date | |
| # of QEMU v10.1 as a default timestamp. | |
| timestamp = time.mktime((2025, 8, 26, 0, 0, 0, 0, 0, 0)) | |
| age = time.time() - timestamp | |
| # Delete files older than half of a year (183 days * 24h * 60m * 60s) | |
| if age > 15811200: | |
| print(f"Removing {cache_dir}/{file.name}.") | |
| file.chmod(stat.S_IWRITE) | |
| file.unlink() | |
| stampfile.unlink() |