feat: update dependencies and enhance package spec parsing with unknown key handling

This commit is contained in:
2026-03-10 19:33:33 -05:00
parent dcbe38ea2b
commit a9102c2f58
4 changed files with 71 additions and 8 deletions
Generated
+14 -3
View File
@@ -418,7 +418,7 @@ checksum = "807800ff3288b621186fe0a8f3392c4652068257302709c24efd918c3dffcdc2"
[[package]] [[package]]
name = "depot" name = "depot"
version = "0.15.0" version = "0.15.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"ar", "ar",
@@ -441,6 +441,7 @@ dependencies = [
"rusqlite", "rusqlite",
"semver", "semver",
"serde", "serde",
"serde_ignored",
"sha2", "sha2",
"suppaftp", "suppaftp",
"sys-mount", "sys-mount",
@@ -1880,6 +1881,16 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "serde_ignored"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "115dffd5f3853e06e746965a20dcbae6ee747ae30b543d91b0e089668bb07798"
dependencies = [
"serde",
"serde_core",
]
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.149" version = "1.0.149"
@@ -2100,9 +2111,9 @@ dependencies = [
[[package]] [[package]]
name = "tempfile" name = "tempfile"
version = "3.26.0" version = "3.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
dependencies = [ dependencies = [
"fastrand", "fastrand",
"getrandom 0.4.1", "getrandom 0.4.1",
+4 -3
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "depot" name = "depot"
version = "0.15.0" version = "0.15.1"
edition = "2024" edition = "2024"
[lints.rust] [lints.rust]
@@ -21,7 +21,7 @@ serde = { version = "1.0.228", features = ["derive"] }
yaml-rust2 = "0.11.0" yaml-rust2 = "0.11.0"
sha2 = "0.10.9" sha2 = "0.10.9"
tar = "0.4.44" tar = "0.4.44"
tempfile = "=3.26.0" tempfile = "=3.27.0"
thiserror = "2.0.18" thiserror = "2.0.18"
toml = "1.0.6" toml = "1.0.6"
url = "2.5.8" url = "2.5.8"
@@ -42,6 +42,7 @@ clap_mangen = "0.2.31"
sys-mount = { version = "3.1.0", default-features = false } sys-mount = { version = "3.1.0", default-features = false }
time = { version = "0.3.47", features = ["formatting", "parsing"] } time = { version = "0.3.47", features = ["formatting", "parsing"] }
b2sum-rust = "0.3.0" b2sum-rust = "0.3.0"
serde_ignored = "0.1.14"
[dev-dependencies] [dev-dependencies]
tempfile = "=3.26.0" tempfile = "=3.27.0"
+1 -1
View File
@@ -1,6 +1,6 @@
project( project(
'depot', 'depot',
version: '0.15.0', version: '0.15.1',
meson_version: '>=0.60.0', meson_version: '>=0.60.0',
) )
+52 -1
View File
@@ -62,8 +62,22 @@ impl PackageSpec {
preprocess_spec_toml_appends(&content).with_context(|| { preprocess_spec_toml_appends(&content).with_context(|| {
format!("Failed to preprocess package spec: {}", abs_path.display()) format!("Failed to preprocess package spec: {}", abs_path.display())
})?; })?;
let mut spec: PackageSpec = toml::from_str(&base_content) let mut unknown_key = None;
let deserializer = toml::Deserializer::parse(&base_content)
.with_context(|| format!("Failed to parse package spec: {}", abs_path.display()))?; .with_context(|| format!("Failed to parse package spec: {}", abs_path.display()))?;
let mut spec: PackageSpec = serde_ignored::deserialize(deserializer, |path| {
if unknown_key.is_none() {
unknown_key = Some(path.to_string());
}
})
.with_context(|| format!("Failed to parse package spec: {}", abs_path.display()))?;
if let Some(path) = unknown_key {
anyhow::bail!(
"Failed to parse package spec: {}: unknown key: {}",
abs_path.display(),
path
);
}
spec.spec_dir = abs_path spec.spec_dir = abs_path
.parent() .parent()
.map(PathBuf::from) .map(PathBuf::from)
@@ -2421,6 +2435,43 @@ type = "autotools"
assert!(spec.build.flags.skip_tests); assert!(spec.build.flags.skip_tests);
} }
#[test]
fn reject_unknown_nested_keys_from_spec() {
let tmp = tempfile::tempdir().unwrap();
let path = tmp.path().join("pkg.toml");
std::fs::write(
&path,
r#"
[package]
name = "foo"
version = "1.0"
description = "d"
homepage = "h"
license = "MIT"
[source]
url = "https://example.com/foo.tar.gz"
sha256 = "skip"
extract_dir = "foo"
[build]
type = "autotools"
[dependencies]
runtime = ["glibc"]
skip_tests = true
"#,
)
.unwrap();
let err = PackageSpec::from_file(&path).expect_err("expected unknown nested key to fail");
assert!(
err.to_string()
.contains("unknown key: dependencies.skip_tests")
);
}
#[test] #[test]
fn parse_configure_file_from_spec() { fn parse_configure_file_from_spec() {
let tmp = tempfile::tempdir().unwrap(); let tmp = tempfile::tempdir().unwrap();