feat: update depot version to 0.10.0 and enhance install logic to skip specific files
This commit is contained in:
Generated
+1
-1
@@ -382,7 +382,7 @@ checksum = "807800ff3288b621186fe0a8f3392c4652068257302709c24efd918c3dffcdc2"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "depot"
|
name = "depot"
|
||||||
version = "0.9.0"
|
version = "0.10.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"ar",
|
"ar",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "depot"
|
name = "depot"
|
||||||
version = "0.9.0"
|
version = "0.10.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[lints.rust]
|
[lints.rust]
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
project(
|
project(
|
||||||
'depot',
|
'depot',
|
||||||
version: '0.9.0',
|
version: '0.10.0',
|
||||||
meson_version: '>=0.60.0',
|
meson_version: '>=0.60.0',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+108
-2
@@ -18,6 +18,19 @@ use walkdir::WalkDir;
|
|||||||
pub const INTERNAL_DEPOT_DIR: &str = ".depot";
|
pub const INTERNAL_DEPOT_DIR: &str = ".depot";
|
||||||
pub const INTERNAL_OUTPUTS_DIR: &str = ".depot/outputs";
|
pub const INTERNAL_OUTPUTS_DIR: &str = ".depot/outputs";
|
||||||
|
|
||||||
|
fn is_info_dir_index_path(rel_path: &str) -> bool {
|
||||||
|
matches!(rel_path, "usr/info/dir" | "usr/share/info/dir")
|
||||||
|
|| rel_path.starts_with("usr/info/dir.")
|
||||||
|
|| rel_path.starts_with("usr/share/info/dir.")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_purged_install_basename(rel_path: &str) -> bool {
|
||||||
|
Path::new(rel_path)
|
||||||
|
.file_name()
|
||||||
|
.and_then(|name| name.to_str())
|
||||||
|
.is_some_and(|name| name == ".packlist" || name.ends_with(".pod"))
|
||||||
|
}
|
||||||
|
|
||||||
fn is_skipped_install_path(rel_path: &str) -> bool {
|
fn is_skipped_install_path(rel_path: &str) -> bool {
|
||||||
let p = rel_path.trim_start_matches('/');
|
let p = rel_path.trim_start_matches('/');
|
||||||
p == ".metadata.toml"
|
p == ".metadata.toml"
|
||||||
@@ -27,8 +40,8 @@ fn is_skipped_install_path(rel_path: &str) -> bool {
|
|||||||
.is_some_and(|rest| rest.starts_with('/'))
|
.is_some_and(|rest| rest.starts_with('/'))
|
||||||
|| p == "scripts"
|
|| p == "scripts"
|
||||||
|| p.starts_with("scripts/")
|
|| p.starts_with("scripts/")
|
||||||
|| p == "usr/share/info/dir"
|
|| is_info_dir_index_path(p)
|
||||||
|| p.starts_with("usr/share/info/dir.")
|
|| is_purged_install_basename(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the internal split-output staging root inside a package `destdir`.
|
/// Return the internal split-output staging root inside a package `destdir`.
|
||||||
@@ -1160,18 +1173,62 @@ mod tests {
|
|||||||
let destdir = tmp.path().join("dest");
|
let destdir = tmp.path().join("dest");
|
||||||
let tx_base = tmp.path().join("tx");
|
let tx_base = tmp.path().join("tx");
|
||||||
std::fs::create_dir_all(&rootfs).unwrap();
|
std::fs::create_dir_all(&rootfs).unwrap();
|
||||||
|
std::fs::create_dir_all(destdir.join("usr/info")).unwrap();
|
||||||
std::fs::create_dir_all(destdir.join("usr/share/info")).unwrap();
|
std::fs::create_dir_all(destdir.join("usr/share/info")).unwrap();
|
||||||
|
std::fs::write(destdir.join("usr/info/dir"), "legacy index").unwrap();
|
||||||
|
std::fs::write(destdir.join("usr/info/dir.bz2"), "legacy index bz2").unwrap();
|
||||||
std::fs::write(destdir.join("usr/share/info/dir"), "index").unwrap();
|
std::fs::write(destdir.join("usr/share/info/dir"), "index").unwrap();
|
||||||
std::fs::write(destdir.join("usr/share/info/dir.gz"), "index gz").unwrap();
|
std::fs::write(destdir.join("usr/share/info/dir.gz"), "index gz").unwrap();
|
||||||
std::fs::write(destdir.join("usr/share/info/ok.info"), "ok").unwrap();
|
std::fs::write(destdir.join("usr/share/info/ok.info"), "ok").unwrap();
|
||||||
|
|
||||||
let _tx = install_atomic(&destdir, &rootfs, &tx_base, &[], &[]).unwrap();
|
let _tx = install_atomic(&destdir, &rootfs, &tx_base, &[], &[]).unwrap();
|
||||||
|
|
||||||
|
assert!(!rootfs.join("usr/info/dir").exists());
|
||||||
|
assert!(!rootfs.join("usr/info/dir.bz2").exists());
|
||||||
assert!(!rootfs.join("usr/share/info/dir").exists());
|
assert!(!rootfs.join("usr/share/info/dir").exists());
|
||||||
assert!(!rootfs.join("usr/share/info/dir.gz").exists());
|
assert!(!rootfs.join("usr/share/info/dir.gz").exists());
|
||||||
assert!(rootfs.join("usr/share/info/ok.info").exists());
|
assert!(rootfs.join("usr/share/info/ok.info").exists());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn install_atomic_skips_packlists_and_pod_files() {
|
||||||
|
let tmp = tempfile::tempdir().unwrap();
|
||||||
|
let rootfs = tmp.path().join("root");
|
||||||
|
let destdir = tmp.path().join("dest");
|
||||||
|
let tx_base = tmp.path().join("tx");
|
||||||
|
std::fs::create_dir_all(&rootfs).unwrap();
|
||||||
|
std::fs::create_dir_all(destdir.join("usr/lib/perl5/5.42/core_perl")).unwrap();
|
||||||
|
std::fs::create_dir_all(destdir.join("usr/lib/perl5/5.42/vendor_perl/auto/Error")).unwrap();
|
||||||
|
std::fs::create_dir_all(destdir.join("usr/share/doc/perl-error")).unwrap();
|
||||||
|
std::fs::write(
|
||||||
|
destdir.join("usr/lib/perl5/5.42/core_perl/perllocal.pod"),
|
||||||
|
"perllocal",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
std::fs::write(
|
||||||
|
destdir.join("usr/lib/perl5/5.42/vendor_perl/auto/Error/.packlist"),
|
||||||
|
"packlist",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
std::fs::write(destdir.join("usr/share/doc/perl-error/Error.pod"), "pod").unwrap();
|
||||||
|
std::fs::write(destdir.join("usr/share/doc/perl-error/README"), "readme").unwrap();
|
||||||
|
|
||||||
|
let _tx = install_atomic(&destdir, &rootfs, &tx_base, &[], &[]).unwrap();
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
!rootfs
|
||||||
|
.join("usr/lib/perl5/5.42/core_perl/perllocal.pod")
|
||||||
|
.exists()
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
!rootfs
|
||||||
|
.join("usr/lib/perl5/5.42/vendor_perl/auto/Error/.packlist")
|
||||||
|
.exists()
|
||||||
|
);
|
||||||
|
assert!(!rootfs.join("usr/share/doc/perl-error/Error.pod").exists());
|
||||||
|
assert!(rootfs.join("usr/share/doc/perl-error/README").exists());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn install_atomic_skips_package_metadata_files() {
|
fn install_atomic_skips_package_metadata_files() {
|
||||||
let tmp = tempfile::tempdir().unwrap();
|
let tmp = tempfile::tempdir().unwrap();
|
||||||
@@ -1232,13 +1289,18 @@ mod tests {
|
|||||||
fn generate_manifest_skips_info_dir_index() {
|
fn generate_manifest_skips_info_dir_index() {
|
||||||
let tmp = tempfile::tempdir().unwrap();
|
let tmp = tempfile::tempdir().unwrap();
|
||||||
let destdir = tmp.path().join("dest");
|
let destdir = tmp.path().join("dest");
|
||||||
|
std::fs::create_dir_all(destdir.join("usr/info")).unwrap();
|
||||||
std::fs::create_dir_all(destdir.join("usr/share/info")).unwrap();
|
std::fs::create_dir_all(destdir.join("usr/share/info")).unwrap();
|
||||||
|
std::fs::write(destdir.join("usr/info/dir"), "legacy index").unwrap();
|
||||||
|
std::fs::write(destdir.join("usr/info/dir.zst"), "legacy index zst").unwrap();
|
||||||
std::fs::write(destdir.join("usr/share/info/dir"), "index").unwrap();
|
std::fs::write(destdir.join("usr/share/info/dir"), "index").unwrap();
|
||||||
std::fs::write(destdir.join("usr/share/info/dir.xz"), "index xz").unwrap();
|
std::fs::write(destdir.join("usr/share/info/dir.xz"), "index xz").unwrap();
|
||||||
std::fs::write(destdir.join("usr/share/info/ok.info"), "ok").unwrap();
|
std::fs::write(destdir.join("usr/share/info/ok.info"), "ok").unwrap();
|
||||||
|
|
||||||
let manifest = generate_manifest_with_dirs(&destdir).unwrap();
|
let manifest = generate_manifest_with_dirs(&destdir).unwrap();
|
||||||
|
|
||||||
|
assert!(!manifest.files.contains(&"usr/info/dir".to_string()));
|
||||||
|
assert!(!manifest.files.contains(&"usr/info/dir.zst".to_string()));
|
||||||
assert!(!manifest.files.contains(&"usr/share/info/dir".to_string()));
|
assert!(!manifest.files.contains(&"usr/share/info/dir".to_string()));
|
||||||
assert!(
|
assert!(
|
||||||
!manifest
|
!manifest
|
||||||
@@ -1252,6 +1314,50 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn generate_manifest_skips_packlists_and_pod_files() {
|
||||||
|
let tmp = tempfile::tempdir().unwrap();
|
||||||
|
let destdir = tmp.path().join("dest");
|
||||||
|
std::fs::create_dir_all(destdir.join("usr/lib/perl5/5.42/core_perl")).unwrap();
|
||||||
|
std::fs::create_dir_all(destdir.join("usr/lib/perl5/5.42/vendor_perl/auto/Error")).unwrap();
|
||||||
|
std::fs::create_dir_all(destdir.join("usr/share/doc/perl-error")).unwrap();
|
||||||
|
std::fs::write(
|
||||||
|
destdir.join("usr/lib/perl5/5.42/core_perl/perllocal.pod"),
|
||||||
|
"perllocal",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
std::fs::write(
|
||||||
|
destdir.join("usr/lib/perl5/5.42/vendor_perl/auto/Error/.packlist"),
|
||||||
|
"packlist",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
std::fs::write(destdir.join("usr/share/doc/perl-error/Error.pod"), "pod").unwrap();
|
||||||
|
std::fs::write(destdir.join("usr/share/doc/perl-error/README"), "readme").unwrap();
|
||||||
|
|
||||||
|
let manifest = generate_manifest_with_dirs(&destdir).unwrap();
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
!manifest
|
||||||
|
.files
|
||||||
|
.contains(&"usr/lib/perl5/5.42/core_perl/perllocal.pod".to_string())
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
!manifest
|
||||||
|
.files
|
||||||
|
.contains(&"usr/lib/perl5/5.42/vendor_perl/auto/Error/.packlist".to_string())
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
!manifest
|
||||||
|
.files
|
||||||
|
.contains(&"usr/share/doc/perl-error/Error.pod".to_string())
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
manifest
|
||||||
|
.files
|
||||||
|
.contains(&"usr/share/doc/perl-error/README".to_string())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn generate_manifest_skips_package_metadata_files() {
|
fn generate_manifest_skips_package_metadata_files() {
|
||||||
let tmp = tempfile::tempdir().unwrap();
|
let tmp = tempfile::tempdir().unwrap();
|
||||||
|
|||||||
Reference in New Issue
Block a user