Merge branch 'prune-fail' into 'master'

cookbook: Don't always prune sysroot with clean-target enabled

See merge request redox-os/redox!2425
This commit is contained in:
Jeremy Soller 2026-11-02 17:46:28 -07:00
commit 28f5c3d7cb
2 changed files with 35 additions and 8 deletions

View File

@ -276,9 +276,21 @@ pub fn build(
};
let have_toolchain = !name.is_host() && !dep_host_pkgars.is_empty();
let (sysroot_cached, toolchain_cached) = (
build_deps_dir(logger, &sysroot_dir, deps_sysroot)?,
build_deps_dir(
logger,
&sysroot_dir,
deps_sysroot,
false,
cook_config.clean_target,
)?,
if have_toolchain {
build_deps_dir(logger, &toolchain_dir, &dep_host_pkgars)?
build_deps_dir(
logger,
&toolchain_dir,
&dep_host_pkgars,
false,
cook_config.clean_target,
)?
} else {
true
},
@ -301,14 +313,12 @@ pub fn build(
remove_stage_dir(stage_dir)?;
}
if cook_config.clean_target {
// no matter what, these two caches are invalid
// both caches are invalid without init tag
if sysroot_cached {
fs::remove_all(&sysroot_dir)?;
build_deps_dir(logger, &sysroot_dir, deps_sysroot)?;
build_deps_dir(logger, &sysroot_dir, deps_sysroot, true, true)?;
}
if toolchain_cached && have_toolchain {
fs::remove_all(&toolchain_dir)?;
build_deps_dir(logger, &toolchain_dir, &dep_host_pkgars)?;
build_deps_dir(logger, &toolchain_dir, &dep_host_pkgars, true, true)?;
}
}
} else {
@ -627,6 +637,8 @@ fn build_deps_dir(
logger: &PtyOut,
deps_dir: &PathBuf,
dep_pkgars: &BTreeSet<(PackageName, PathBuf)>,
check_init_tag: bool,
write_init_tag: bool,
) -> Result<bool> {
let pkey_path = "build/id_ed25519.pub.toml";
let pkey_file = match PublicKeyFile::open(pkey_path) {
@ -675,7 +687,12 @@ fn build_deps_dir(
}
}
}
if cached {
if cached
&& (!check_init_tag || {
let init_tag_file = deps_dir.join(".tags-init");
std::fs::exists(&init_tag_file).unwrap_or(false)
})
{
return Ok(true);
}
fs::remove_all(deps_dir)?;
@ -705,6 +722,13 @@ fn build_deps_dir(
std::fs::write(&tag_file, hash.as_bytes()).map_err(wrap_io_err!("Writing tag"))?;
}
if write_init_tag {
let init_tag_file = deps_dir_tmp.join(".tags-init");
// this file is used to prevent removing deps dir when clean_target
// is enabled, then clean_deps_dir will remove the tag after build.
std::fs::write(init_tag_file, "").map_err(wrap_io_err!("Writing init tag"))?;
}
// Move sysroot.tmp to sysroot atomically
fs::rename(&deps_dir_tmp, deps_dir)?;

View File

@ -64,6 +64,9 @@ pub fn package(
}
if !package_file.is_file() {
if cook_config.compressed && cook_config.verbose {
log_to_pty!(logger, "DEBUG: compressing '{}'", package_file.display());
}
pkgar::create_with_flags(
secret_path,
package_file.to_str().unwrap(),