difftreelog
fix primop registration
in: trunk
5 files changed
crates/fleet-base/src/opts.rsdiffbeforeafterboth222223use crate::{23use crate::{24 fleetdata::FleetData,24 fleetdata::FleetData,25 host::{Config, ConfigHost, FleetConfigInternals},25 host::{Config, ConfigHost, FleetConfigInternals}, primops::init_primops,26};26};272728#[derive(Clone)]28#[derive(Clone)]213 std::fs::read_to_string(&fleet_data_path).context("reading fleet state (fleet.nix)")?;213 std::fs::read_to_string(&fleet_data_path).context("reading fleet state (fleet.nix)")?;214 let data = Arc::new(Mutex::new(FleetData::from_str(&bytes)?));214 let data = Arc::new(Mutex::new(FleetData::from_str(&bytes)?));215216 init_primops(data.clone());215217216 let mut fetch_settings = FetchSettings::new();218 let mut fetch_settings = FetchSettings::new();217 fetch_settings.set(c"warn-dirty", c"false");219 fetch_settings.set(c"warn-dirty", c"false");crates/fleet-base/src/primops.rsdiffbeforeafterboth--- a/crates/fleet-base/src/primops.rs
+++ b/crates/fleet-base/src/primops.rs
@@ -2,6 +2,7 @@
use std::sync::{Arc, Mutex};
use nix_eval::{NativeFn, Value};
+use tracing::info;
use crate::fleetdata::{FleetData, FleetSecrets};
@@ -23,21 +24,9 @@
struct FsSecretsBackend {}
pub fn init_primops(secrets: Arc<Mutex<FleetData>>) {
- NativeFn::new(
- c"fleet_ensure_host_secret",
- c"Ensure secret existence for a host, regenerating it in case of some mismatch",
- [c"host", c"secret", c"generator"],
- |[host, secret, generator]| {
- todo!("ensure secret");
- Ok(Value::new_attrs(HashMap::from_iter([(
- "raw",
- Value::new_str("rawData"),
- )])))
- },
- )
- .register();
+ info!("initializing primops");
NativeFn::new(
- c"fleet_ensure_host_secret",
+ c"__fleetEnsureHostSecret",
c"Ensure secret existence for a host, regenerating it in case of some mismatch",
[c"host", c"secret", c"generator"],
|[host, secret, generator]| {
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;
};
}
);