difftreelog
fix primop registration
in: trunk
5 files changed
crates/fleet-base/src/opts.rsdiffbeforeafterboth--- a/crates/fleet-base/src/opts.rs
+++ b/crates/fleet-base/src/opts.rs
@@ -22,7 +22,7 @@
use crate::{
fleetdata::FleetData,
- host::{Config, ConfigHost, FleetConfigInternals},
+ host::{Config, ConfigHost, FleetConfigInternals}, primops::init_primops,
};
#[derive(Clone)]
@@ -213,6 +213,8 @@
std::fs::read_to_string(&fleet_data_path).context("reading fleet state (fleet.nix)")?;
let data = Arc::new(Mutex::new(FleetData::from_str(&bytes)?));
+ init_primops(data.clone());
+
let mut fetch_settings = FetchSettings::new();
fetch_settings.set(c"warn-dirty", c"false");
crates/fleet-base/src/primops.rsdiffbeforeafterboth1use std::collections::HashMap;2use std::sync::{Arc, Mutex};34use nix_eval::{NativeFn, Value};56use crate::fleetdata::{FleetData, FleetSecrets};78#[derive(thiserror::Error, Debug)]9enum Error {}1011struct Parts {12 encrypted: Vec<String>,13 public: Vec<String>,14}1516trait SecretsBackend {17 fn has_shared(&self, name: &str);18 fn has_host(&self, host: &str, name: &str);19 fn shared_parts(&self, name: &str) -> Parts;20 fn host_parts(&self, host: &str, name: &str) -> Parts;21}2223struct FsSecretsBackend {}2425pub fn init_primops(secrets: Arc<Mutex<FleetData>>) {26 NativeFn::new(27 c"fleet_ensure_host_secret",28 c"Ensure secret existence for a host, regenerating it in case of some mismatch",29 [c"host", c"secret", c"generator"],30 |[host, secret, generator]| {31 todo!("ensure secret");32 Ok(Value::new_attrs(HashMap::from_iter([(33 "raw",34 Value::new_str("rawData"),35 )])))36 },37 )38 .register();39 NativeFn::new(40 c"fleet_ensure_host_secret",41 c"Ensure secret existence for a host, regenerating it in case of some mismatch",42 [c"host", c"secret", c"generator"],43 |[host, secret, generator]| {44 todo!("ensure secret");45 Ok(Value::new_attrs(HashMap::from_iter([(46 "raw",47 Value::new_str("rawData"),48 )])))49 },50 )51 .register();52}crates/nix-eval/src/lib.rsdiffbeforeafterboth--- a/crates/nix-eval/src/lib.rs
+++ b/crates/nix-eval/src/lib.rs
@@ -966,9 +966,9 @@
let mut args = args.into_iter().map(|v| v.as_ptr()).collect_vec();
args.push(null());
let args = args.as_mut_ptr();
- let primop = with_default_context(|c, _| unsafe {
+ let primop = unsafe {
alloc_primop(
- c,
+ null_mut(),
f,
N as i32,
name.as_ptr(),
@@ -976,14 +976,14 @@
doc.as_ptr(),
Box::into_raw(closure).cast(),
)
- })
- .expect("primop allocation should not fail");
+ };
+
+ assert!(!primop.is_null(), "primop allocation should not fail");
Self(primop)
}
pub fn register(self) {
- with_default_context(|c, _| unsafe { register_primop(c, self.0) })
- .expect("primop registration should not fail");
+ unsafe { register_primop(null_mut(), self.0) };
}
}
@@ -999,6 +999,17 @@
#[test_log::test]
fn test_native() -> Result<()> {
init_libraries();
+ NativeFn::new(
+ c"__uppercaseSuffix2",
+ c"make string uppercase and add suffix",
+ [c"str", c"suffix"],
+ |[str, suffix]: [&Value; 2]| {
+ let str = str.to_string()?;
+ let suffix = suffix.to_string()?;
+ Ok(Value::new_str(&format!("{}{suffix}", str.to_uppercase())))
+ },
+ )
+ .register();
let mut fetch_settings = FetchSettings::new();
fetch_settings.set(c"warn-dirty", c"false");
@@ -1036,6 +1047,8 @@
let test_result: String = nix_go_json!(test_data.testPrimop(uppercase_suffix));
assert_eq!(test_result, "PREFIX_BODY_SUFFIX");
+ let test_result: String = nix_go_json!(builtins.uppercaseSuffix2("test")("suffix"));
+ assert_eq!(test_result, "TESTsuffix");
let nix_ctx = NixContext::new();
let store = GLOBAL_STATE.store.parse_path(s.as_c_str())?;
crates/nix-eval/src/macros.rsdiffbeforeafterboth--- a/crates/nix-eval/src/macros.rs
+++ b/crates/nix-eval/src/macros.rs
@@ -47,11 +47,7 @@
nix_expr_inner!(@field(out) $($tt)*);
out
}};
- ($v:literal) => {{
- use $crate::macros::NixExprBuilder;
- NixExprBuilder::string($v)
- }};
- ({$v:expr}) => {{
+ ($v:expr) => {{
$crate::Value::serialized(&$v)?
}}
}
modules/nixos/secrets.nixdiffbeforeafterboth--- a/modules/nixos/secrets.nix
+++ b/modules/nixos/secrets.nix
@@ -103,7 +103,7 @@
};
};
config = {
- parts = builtins.fleet_ensure_host_secret sysConfig.networking.hostName secretName config.generator;
+ parts = builtins.fleetEnsureHostSecret sysConfig.networking.hostName secretName config.generator;
};
}
);