From 11a7a3737bbfe788a3f445ca359a9fa8cff6f789 Mon Sep 17 00:00:00 2001 From: Chris Guida Date: Tue, 28 Sep 2021 16:27:11 -0500 Subject: [PATCH] compat: fix dependency command and update indexmap to btreemap --- compat/Cargo.lock | 141 +++++++++++++++++++++++++------------ compat/src/config/mod.rs | 26 +++---- compat/src/config/rules.rs | 2 +- compat/src/main.rs | 38 ++++++---- 4 files changed, 137 insertions(+), 70 deletions(-) diff --git a/compat/Cargo.lock b/compat/Cargo.lock index d7587e042..5a3ad2136 100644 --- a/compat/Cargo.lock +++ b/compat/Cargo.lock @@ -61,9 +61,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28ae2b3dec75a406790005a200b1bd89785afc02517a00ca99ecfe093ee9e6cf" +checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" dependencies = [ "backtrace", ] @@ -291,7 +291,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "thiserror", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-util", "url", "winapi", @@ -833,6 +833,7 @@ dependencies = [ "libc", "log", "nix 0.22.1", + "num", "openssh-keys", "openssl", "patch-db", @@ -849,6 +850,7 @@ dependencies = [ "rpc-toolkit", "rust-argon2", "scopeguard", + "sequence_trie", "serde", "serde_json", "serde_yaml", @@ -858,7 +860,7 @@ dependencies = [ "stderrlog", "tar", "thiserror", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-compat-02", "tokio-stream", "tokio-tar", @@ -1208,7 +1210,7 @@ dependencies = [ "http", "indexmap", "slab", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-util", "tracing", ] @@ -1273,9 +1275,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" +checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" dependencies = [ "bytes 1.1.0", "fnv", @@ -1329,7 +1331,7 @@ dependencies = [ "itoa", "pin-project-lite 0.2.7", "socket2", - "tokio 1.11.0", + "tokio 1.12.0", "tower-service", "tracing", "want", @@ -1344,7 +1346,7 @@ dependencies = [ "bytes 1.1.0", "hyper", "native-tls", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-native-tls", ] @@ -1360,7 +1362,7 @@ dependencies = [ "hyper", "log", "sha-1 0.9.8", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-tungstenite", ] @@ -1374,7 +1376,7 @@ dependencies = [ "hex", "hyper", "pin-project", - "tokio 1.11.0", + "tokio 1.12.0", ] [[package]] @@ -1570,9 +1572,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.101" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" +checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" [[package]] name = "libsqlite3-sys" @@ -1737,19 +1739,6 @@ dependencies = [ "libc", ] -[[package]] -name = "nix" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8e5e343312e7fbeb2a52139114e9e702991ef9c2aea6817ff2440b35647d56" -dependencies = [ - "bitflags", - "cc", - "cfg-if", - "libc", - "memoffset", -] - [[package]] name = "nix" version = "0.22.1" @@ -1796,6 +1785,40 @@ dependencies = [ "winapi", ] +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74e768dff5fb39a41b3bcd30bb25cf989706c90d028d1ad71971987aa309d535" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +dependencies = [ + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.44" @@ -1806,6 +1829,29 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.14" @@ -1951,18 +1997,17 @@ dependencies = [ "async-trait", "fd-lock-rs", "futures", - "indexmap", "json-patch", "json-ptr", "lazy_static", "log", - "nix 0.20.1", + "nix 0.22.1", "patch-db-macro", "serde", "serde_cbor 0.11.1", "serde_json", "thiserror", - "tokio 1.11.0", + "tokio 1.12.0", ] [[package]] @@ -2452,7 +2497,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "time 0.2.27", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-native-tls", "tokio-socks", "url", @@ -2514,7 +2559,7 @@ dependencies = [ "serde_cbor 0.11.2", "serde_json", "thiserror", - "tokio 1.11.0", + "tokio 1.12.0", "url", "yajrc", ] @@ -2692,6 +2737,12 @@ dependencies = [ "pest", ] +[[package]] +name = "sequence_trie" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee22067b7ccd072eeb64454b9c6e1b33b61cd0d49e895fd48676a184580e0c3" + [[package]] name = "serde" version = "1.0.130" @@ -2741,9 +2792,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.67" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950" +checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" dependencies = [ "indexmap", "itoa", @@ -3022,7 +3073,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14302b678d9c76b28f2e60115211e25e0aabc938269991745a169753dc00e35c" dependencies = [ "once_cell", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-rustls", ] @@ -3375,9 +3426,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4efe6fc2395938c8155973d7be49fe8d03a843726e285e100a8a383cc0154ce" +checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc" dependencies = [ "autocfg", "bytes 1.1.0", @@ -3403,7 +3454,7 @@ dependencies = [ "once_cell", "pin-project-lite 0.2.7", "tokio 0.2.25", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-stream", ] @@ -3425,7 +3476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" dependencies = [ "native-tls", - "tokio 1.11.0", + "tokio 1.12.0", ] [[package]] @@ -3435,7 +3486,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" dependencies = [ "rustls", - "tokio 1.11.0", + "tokio 1.12.0", "webpki", ] @@ -3448,7 +3499,7 @@ dependencies = [ "either", "futures-util", "thiserror", - "tokio 1.11.0", + "tokio 1.12.0", ] [[package]] @@ -3459,7 +3510,7 @@ checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f" dependencies = [ "futures-core", "pin-project-lite 0.2.7", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-util", ] @@ -3472,7 +3523,7 @@ dependencies = [ "futures-core", "libc", "redox_syscall 0.2.10", - "tokio 1.11.0", + "tokio 1.12.0", "tokio-stream", "xattr", ] @@ -3486,7 +3537,7 @@ dependencies = [ "futures-util", "log", "pin-project", - "tokio 1.11.0", + "tokio 1.12.0", "tungstenite", ] @@ -3501,7 +3552,7 @@ dependencies = [ "futures-sink", "log", "pin-project-lite 0.2.7", - "tokio 1.11.0", + "tokio 1.12.0", ] [[package]] @@ -3530,7 +3581,7 @@ dependencies = [ "serde_derive", "sha2", "sha3", - "tokio 1.11.0", + "tokio 1.12.0", ] [[package]] diff --git a/compat/src/config/mod.rs b/compat/src/config/mod.rs index 7dbc82d72..36c9e3378 100644 --- a/compat/src/config/mod.rs +++ b/compat/src/config/mod.rs @@ -1,4 +1,5 @@ use std::borrow::Cow; +use std::collections::BTreeMap; use std::path::Path; use beau_collector::BeauCollector; @@ -31,7 +32,7 @@ pub fn validate_configuration( std::fs::rename(config_path.with_extension("tmp"), config_path)?; // return set result Ok(SetResult { - depends_on: indexmap::IndexMap::new(), + depends_on: BTreeMap::new(), // sending sigterm so service is restarted - in 0.3.x services, this is whatever signal is needed to send to the process to pick up the configuration signal: Some(nix::sys::signal::SIGTERM), }) @@ -43,16 +44,17 @@ pub fn validate_configuration( pub fn validate_dependency_configuration( name: &str, config: Config, + parent_name: &str, + parent_config: Config, rules_path: &Path, - dependent_config: Config, ) -> Result<(), anyhow::Error> { let rules: Vec = serde_yaml::from_reader(std::fs::File::open(rules_path)?)?; let mut cfgs = LinearMap::new(); + cfgs.insert(parent_name, Cow::Borrowed(&parent_config)); cfgs.insert(name, Cow::Borrowed(&config)); - cfgs.insert(name, Cow::Borrowed(&dependent_config)); let rule_check = rules .into_iter() - .map(|r| r.check(&config, &cfgs)) + .map(|r| r.check(&parent_config, &cfgs)) .bcollect::>(); match rule_check { Ok(_) => Ok(()), @@ -62,22 +64,22 @@ pub fn validate_dependency_configuration( pub fn apply_dependency_configuration( name: &str, - mut config: Config, + config: Config, + parent_name: &str, + mut parent_config: Config, rules_path: &Path, - dependent_config: Config, ) -> Result { let rules: Vec = serde_yaml::from_reader(std::fs::File::open(rules_path)?)?; let mut cfgs = LinearMap::new(); + cfgs.insert(parent_name, Cow::Owned(parent_config.clone())); cfgs.insert(name, Cow::Owned(config.clone())); - cfgs.insert(name, Cow::Owned(dependent_config.clone())); let rule_check = rules .into_iter() - .map(|r| r.apply(name, &mut config, &mut cfgs)) + .map(|r| r.apply(parent_name, &mut parent_config, &mut cfgs)) .bcollect::>(); - match rule_check { - Ok(_) => Ok(config), - Err(e) => Err(anyhow!("{}", e)) + Ok(_) => Ok(parent_config), + Err(e) => Err(anyhow!("{}", e)), } -} \ No newline at end of file +} diff --git a/compat/src/config/rules.rs b/compat/src/config/rules.rs index c3e258239..0bd25e27e 100644 --- a/compat/src/config/rules.rs +++ b/compat/src/config/rules.rs @@ -114,7 +114,7 @@ impl ConfigRuleEntry { cfgs: &LinearMap<&str, Cow>, ) -> Result<(), anyhow::Error> { if !(self.rule.compiled)(cfg, cfgs) { - anyhow::anyhow!("{}", self.description); + return Err(anyhow::anyhow!("{}", self.description)) } Ok(()) } diff --git a/compat/src/main.rs b/compat/src/main.rs index 8c32e3d55..34aff1fdc 100644 --- a/compat/src/main.rs +++ b/compat/src/main.rs @@ -76,6 +76,11 @@ fn inner_main() -> Result<(), anyhow::Error> { SubCommand::with_name("dependency") .subcommand( SubCommand::with_name("check") + .arg( + Arg::with_name("dependent_package_id") + .help("Package identifier of this package (the child/depdendent)") + .required(true), + ) .arg( Arg::with_name("dependency_package_id") .help("Identifier of the dependency") @@ -94,9 +99,14 @@ fn inner_main() -> Result<(), anyhow::Error> { ) .subcommand( SubCommand::with_name("auto-configure") + .arg( + Arg::with_name("dependent_package_id") + .help("Package identifier of this package (the child/depdendent)") + .required(true), + ) .arg( Arg::with_name("dependency_package_id") - .help("Package identifier of the dependency") + .help("Package identifier of the parent/dependency") .required(true), ) .arg( @@ -200,20 +210,22 @@ fn inner_main() -> Result<(), anyhow::Error> { }, ("dependency", Some(sub_m)) => match sub_m.subcommand() { ("check", Some(sub_m)) => { - let dependency_config = serde_yaml::from_reader(stdin())?; - let dependent_config = serde_yaml::from_reader( + let parent_config = serde_yaml::from_reader(stdin())?; + let config = serde_yaml::from_reader( File::open( Path::new(sub_m.value_of("mountpoint").unwrap()).join("start9/config.yaml"), ) .unwrap(), )?; let rules_path = Path::new(sub_m.value_of("assets").unwrap()); - let name = sub_m.value_of("dependency_package_id").unwrap(); + let name = sub_m.value_of("dependent_package_id").unwrap(); + let parent_name = sub_m.value_of("dependency_package_id").unwrap(); match validate_dependency_configuration( - &name, - dependency_config, + name, + config, + parent_name, + parent_config, rules_path, - dependent_config, ) { Ok(a) => { serde_yaml::to_writer(stdout(), &a)?; @@ -226,20 +238,22 @@ fn inner_main() -> Result<(), anyhow::Error> { } } ("auto-configure", Some(sub_m)) => { - let dependency_config = serde_yaml::from_reader(stdin())?; - let dependent_config = serde_yaml::from_reader( + let parent_config = serde_yaml::from_reader(stdin())?; + let config = serde_yaml::from_reader( File::open( Path::new(sub_m.value_of("mountpoint").unwrap()).join("start9/config.yaml"), ) .unwrap(), )?; let rules_path = Path::new(sub_m.value_of("assets").unwrap()); - let name = sub_m.value_of("dependency_package_id").unwrap(); + let name = sub_m.value_of("dependent_package_id").unwrap(); + let parent_name = sub_m.value_of("dependency_package_id").unwrap(); match apply_dependency_configuration( name, - dependency_config, + config, + parent_name, + parent_config, rules_path, - dependent_config, ) { Ok(a) => { serde_yaml::to_writer(stdout(), &a)?;