fix: Uncrash the tests by keeping fetchers_settings around

This is arguably a partial fix.
This should either be modeled with lifetimes, or be addressed in
Nix itself.
This commit is contained in:
Robert Hensing 2025-10-26 22:49:14 +01:00
parent 18da552952
commit 510ba4abe2

View file

@ -267,6 +267,7 @@ mod tests {
// Only set experimental-features once to minimize the window where // Only set experimental-features once to minimize the window where
// concurrent Nix operations might read the setting while it's being modified // concurrent Nix operations might read the setting while it's being modified
INIT.call_once(|| { INIT.call_once(|| {
nix_bindings_expr::eval_state::init().unwrap();
nix_bindings_util::settings::set("experimental-features", "flakes").unwrap(); nix_bindings_util::settings::set("experimental-features", "flakes").unwrap();
}); });
} }
@ -299,6 +300,7 @@ mod tests {
init(); init();
let gc_registration = gc_register_my_thread(); let gc_registration = gc_register_my_thread();
let store = Store::open(None, []).unwrap(); let store = Store::open(None, []).unwrap();
let fetchers_settings = FetchersSettings::new().unwrap();
let flake_settings = FlakeSettings::new().unwrap(); let flake_settings = FlakeSettings::new().unwrap();
let mut eval_state = EvalStateBuilder::new(store) let mut eval_state = EvalStateBuilder::new(store)
.unwrap() .unwrap()
@ -326,7 +328,7 @@ mod tests {
let flake_lock_flags = FlakeLockFlags::new(&flake_settings).unwrap(); let flake_lock_flags = FlakeLockFlags::new(&flake_settings).unwrap();
let (flake_ref, fragment) = FlakeReference::parse_with_fragment( let (flake_ref, fragment) = FlakeReference::parse_with_fragment(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&FlakeReferenceParseFlags::new(&flake_settings).unwrap(), &FlakeReferenceParseFlags::new(&flake_settings).unwrap(),
&format!("path:{}#subthing", tmp_dir.path().display()), &format!("path:{}#subthing", tmp_dir.path().display()),
@ -336,7 +338,7 @@ mod tests {
assert_eq!(fragment, "subthing"); assert_eq!(fragment, "subthing");
let locked_flake = LockedFlake::lock( let locked_flake = LockedFlake::lock(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&eval_state, &eval_state,
&flake_lock_flags, &flake_lock_flags,
@ -353,6 +355,7 @@ mod tests {
assert_eq!(hello, "potato"); assert_eq!(hello, "potato");
drop(fetchers_settings);
drop(tmp_dir); drop(tmp_dir);
drop(gc_registration); drop(gc_registration);
} }
@ -362,6 +365,7 @@ mod tests {
init(); init();
let gc_registration = gc_register_my_thread(); let gc_registration = gc_register_my_thread();
let store = Store::open(None, []).unwrap(); let store = Store::open(None, []).unwrap();
let fetchers_settings = FetchersSettings::new().unwrap();
let flake_settings = FlakeSettings::new().unwrap(); let flake_settings = FlakeSettings::new().unwrap();
let mut eval_state = EvalStateBuilder::new(store) let mut eval_state = EvalStateBuilder::new(store)
.unwrap() .unwrap()
@ -382,6 +386,8 @@ mod tests {
let flake_dir_a_str = flake_dir_a.to_str().unwrap(); let flake_dir_a_str = flake_dir_a.to_str().unwrap();
let flake_dir_c_str = flake_dir_c.to_str().unwrap(); let flake_dir_c_str = flake_dir_c.to_str().unwrap();
assert!(!flake_dir_a_str.is_empty());
assert!(!flake_dir_c_str.is_empty());
// a // a
std::fs::write( std::fs::write(
@ -434,7 +440,7 @@ mod tests {
.unwrap(); .unwrap();
let (flake_ref_a, fragment) = FlakeReference::parse_with_fragment( let (flake_ref_a, fragment) = FlakeReference::parse_with_fragment(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&flake_reference_parse_flags, &flake_reference_parse_flags,
&format!("path:{}", &flake_dir_a_str), &format!("path:{}", &flake_dir_a_str),
@ -448,7 +454,7 @@ mod tests {
flake_lock_flags.set_mode_check().unwrap(); flake_lock_flags.set_mode_check().unwrap();
let locked_flake = LockedFlake::lock( let locked_flake = LockedFlake::lock(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&eval_state, &eval_state,
&flake_lock_flags, &flake_lock_flags,
@ -465,7 +471,7 @@ mod tests {
flake_lock_flags.set_mode_virtual().unwrap(); flake_lock_flags.set_mode_virtual().unwrap();
let locked_flake = LockedFlake::lock( let locked_flake = LockedFlake::lock(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&eval_state, &eval_state,
&flake_lock_flags, &flake_lock_flags,
@ -487,7 +493,7 @@ mod tests {
flake_lock_flags.set_mode_check().unwrap(); flake_lock_flags.set_mode_check().unwrap();
let locked_flake = LockedFlake::lock( let locked_flake = LockedFlake::lock(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&eval_state, &eval_state,
&flake_lock_flags, &flake_lock_flags,
@ -507,7 +513,7 @@ mod tests {
flake_lock_flags.set_mode_write_as_needed().unwrap(); flake_lock_flags.set_mode_write_as_needed().unwrap();
let locked_flake = LockedFlake::lock( let locked_flake = LockedFlake::lock(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&eval_state, &eval_state,
&flake_lock_flags, &flake_lock_flags,
@ -527,7 +533,7 @@ mod tests {
flake_lock_flags.set_mode_check().unwrap(); flake_lock_flags.set_mode_check().unwrap();
let locked_flake = LockedFlake::lock( let locked_flake = LockedFlake::lock(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&eval_state, &eval_state,
&flake_lock_flags, &flake_lock_flags,
@ -548,7 +554,7 @@ mod tests {
flake_lock_flags.set_mode_write_as_needed().unwrap(); flake_lock_flags.set_mode_write_as_needed().unwrap();
let (flake_ref_c, fragment) = FlakeReference::parse_with_fragment( let (flake_ref_c, fragment) = FlakeReference::parse_with_fragment(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&flake_reference_parse_flags, &flake_reference_parse_flags,
&format!("path:{}", &flake_dir_c_str), &format!("path:{}", &flake_dir_c_str),
@ -561,7 +567,7 @@ mod tests {
.unwrap(); .unwrap();
let locked_flake = LockedFlake::lock( let locked_flake = LockedFlake::lock(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&eval_state, &eval_state,
&flake_lock_flags, &flake_lock_flags,
@ -584,7 +590,7 @@ mod tests {
flake_lock_flags.set_mode_check().unwrap(); flake_lock_flags.set_mode_check().unwrap();
let locked_flake = LockedFlake::lock( let locked_flake = LockedFlake::lock(
&FetchersSettings::new().unwrap(), &fetchers_settings,
&flake_settings, &flake_settings,
&eval_state, &eval_state,
&flake_lock_flags, &flake_lock_flags,
@ -599,6 +605,7 @@ mod tests {
let hello = eval_state.require_string(&hello).unwrap(); let hello = eval_state.require_string(&hello).unwrap();
assert_eq!(hello, "BOB"); assert_eq!(hello, "BOB");
drop(fetchers_settings);
drop(tmp_dir); drop(tmp_dir);
drop(gc_registration); drop(gc_registration);
} }