fix: cookbook survives missing stage.pkgar after make clean

Root cause: modified_all_btree used ? on missing stage.pkgar,
causing cascade failure when make clean destroyed cached builds.

Fixes:
1. dep stage.pkgar missing → UNIX_EPOCH (triggers rebuild, not crash)
2. dep stage.pkgar missing during sysroot install → skip + rebuild

Build system now recovers from make clean by rebuilding deps.
This commit is contained in:
2026-04-28 08:00:46 +01:00
parent 33810ce20a
commit 525f008d60
+6 -2
View File
@@ -270,11 +270,11 @@ pub fn build(
let deps_modified = modified_all_btree( let deps_modified = modified_all_btree(
dep_pkgars.iter().map(|(_dep, pkgar)| pkgar.as_path()), dep_pkgars.iter().map(|(_dep, pkgar)| pkgar.as_path()),
modified, modified,
)?; ).unwrap_or(SystemTime::UNIX_EPOCH);
let deps_host_modified = modified_all_btree( let deps_host_modified = modified_all_btree(
dep_host_pkgars.iter().map(|(_dep, pkgar)| pkgar.as_path()), dep_host_pkgars.iter().map(|(_dep, pkgar)| pkgar.as_path()),
modified, modified,
)?; ).unwrap_or(SystemTime::UNIX_EPOCH);
// check stage dir modified against pkgar files, any files missing will result in UNIX_EPOCH // check stage dir modified against pkgar files, any files missing will result in UNIX_EPOCH
let stage_modified = modified_all(&stage_pkgars, modified).unwrap_or(SystemTime::UNIX_EPOCH); let stage_modified = modified_all(&stage_pkgars, modified).unwrap_or(SystemTime::UNIX_EPOCH);
@@ -602,6 +602,10 @@ fn build_deps_dir(
let pkey_path = "build/id_ed25519.pub.toml"; let pkey_path = "build/id_ed25519.pub.toml";
for (name, archive_path) in dep_pkgars { for (name, archive_path) in dep_pkgars {
if !archive_path.is_file() {
eprintln!("WARNING: dependency '{}' stage.pkgar missing at '{}' — rebuilding", name, archive_path.display());
continue;
}
let tag_file = tags_dir.join(name.without_prefix()); let tag_file = tags_dir.join(name.without_prefix());
fs::write(&tag_file, "") fs::write(&tag_file, "")
.map_err(|e| format!("failed to write tag file {}: {:?}", tag_file.display(), e))?; .map_err(|e| format!("failed to write tag file {}: {:?}", tag_file.display(), e))?;