+++ /dev/null
-# SPDX-License-Identifier: LGPL-2.1-or-later
-
-# These depend on the configured distribution, release and architecture
-# so we order this drop-in after all the other drop-ins.
-
-[Output]
-@CacheDirectory=mkosi.cache/%d~%r~%a
-@BuildDirectory=mkosi.builddir/%d~%r~%a
]
args, [config] = parse_config(cmdline)
+
+ config = dataclasses.replace(config, image="default-initrd")
assert config.output_dir
config.output_dir.mkdir(exist_ok=True)
def cache_tree_paths(config: MkosiConfig) -> tuple[Path, Path, Path]:
+ fragments = [config.distribution, config.release, config.architecture]
+
+ if config.image:
+ fragments += [config.image]
+
+ key = '~'.join(str(s) for s in fragments)
+
assert config.cache_dir
return (
- config.cache_dir / f"{config.output}.cache",
- config.cache_dir / f"{config.output}.build.cache",
- config.cache_dir / f"{config.output}.manifest",
+ config.cache_dir / f"{key}.cache",
+ config.cache_dir / f"{key}.build.cache",
+ config.cache_dir / f"{key}.manifest",
)
rmtree(build)
move_tree(state.config, state.workspace / "build-overlay", build)
- manifest.write_text(json.dumps(state.config.cache_manifest()))
+ manifest.write_text(
+ json.dumps(
+ state.config.cache_manifest(),
+ cls=MkosiJsonEncoder,
+ indent=4,
+ sort_keys=True,
+ )
+ )
def reuse_cache(state: MkosiState) -> bool:
if manifest.exists():
prev = json.loads(manifest.read_text())
- if prev != state.config.cache_manifest():
+ if prev != json.loads(json.dumps(state.config.cache_manifest(), cls=MkosiJsonEncoder)):
return False
else:
return False
def cache_manifest(self) -> dict[str, Any]:
return {
+ "distribution": self.distribution,
+ "release": self.release,
+ "architecture": self.architecture,
"packages": self.packages,
"build_packages": self.build_packages,
"repositories": self.repositories,