difftreelog
feat ensure lazy trees are enabled for everyone
in: trunk
4 files changed
crates/fleet-base/src/opts.rsdiffbeforeafterboth--- a/crates/fleet-base/src/opts.rs
+++ b/crates/fleet-base/src/opts.rs
@@ -7,7 +7,10 @@
};
use anyhow::{Context, Result, bail};
-use nix_eval::{FetchSettings, FlakeReference, FlakeSettings, Value, nix_go, util::assert_warn};
+use nix_eval::{
+ FetchSettings, FlakeReference, FlakeReferenceParseFlags, FlakeSettings, Value, nix_go,
+ util::assert_warn,
+};
use nom::{
Parser,
bytes::complete::take_while1,
@@ -213,16 +216,21 @@
let mut fetch_settings = FetchSettings::new();
fetch_settings.set(c"warn-dirty", c"false");
- // TODO: use correct directory, not cwd
+ let mut flake_settings = FlakeSettings::new()?;
+ let mut parse = FlakeReferenceParseFlags::new(&flake_settings)?;
+ // For some reason, lazy trees not being used when there is no base dir set
+ parse.set_base_dir("/")?;
+
let (mut flake, _) = FlakeReference::new(
directory
.to_str()
.ok_or_else(|| anyhow::anyhow!("fleet dir should have utf-8 path"))?,
+ &flake_settings,
+ &parse,
&fetch_settings,
)?;
let flake = flake.lock(&fetch_settings)?;
- let mut flake_settings = FlakeSettings::new()?;
let flake = flake.get_attrs(&mut flake_settings)?;
let builtins_field = Value::eval("builtins")?;
crates/nix-eval/src/lib.rsdiffbeforeafterboth--- a/crates/nix-eval/src/lib.rs
+++ b/crates/nix-eval/src/lib.rs
@@ -11,6 +11,7 @@
use serde::de::DeserializeOwned;
pub use anyhow::Result;
+use tracing::instrument;
use self::logging::nix_logging_cxx;
use self::nix_cxx::set_fetcher_setting;
@@ -18,11 +19,12 @@
alloc_value, c_context, c_context_create, err_code, err_info_msg, eval_state_build,
eval_state_builder_new, expr_eval_from_string, fetchers_settings, fetchers_settings_free,
fetchers_settings_new, flake_lock, flake_lock_flags, flake_lock_flags_free,
- flake_lock_flags_new, flake_reference_parse_flags, flake_reference_parse_flags_free,
- flake_reference_parse_flags_new, flake_reference_parse_flags_set_base_directory,
- flake_settings, flake_settings_free, flake_settings_new, init_bool, init_int, init_string,
- locked_flake_free, locked_flake_get_output_attrs, set_err_msg, setting_set, state_free,
- value_decref, value_incref,
+ flake_lock_flags_new, flake_lock_flags_set_mode_virtual, flake_reference_parse_flags,
+ flake_reference_parse_flags_free, flake_reference_parse_flags_new,
+ flake_reference_parse_flags_set_base_directory, flake_settings, flake_settings_free,
+ flake_settings_new, init_bool, init_int, init_string, locked_flake_free,
+ locked_flake_get_output_attrs, set_err_msg, setting_set, state_free, value_decref,
+ value_incref,
};
// Contains macros helpers
@@ -94,7 +96,7 @@
#[derive(Debug)]
#[repr(i32)]
-enum NixErrorKind {
+pub enum NixErrorKind {
Unknown = 1,
Overflow = 2,
Key = 3,
@@ -136,6 +138,7 @@
pub struct ThreadRegisterGuard {}
impl ThreadRegisterGuard {
+ #[allow(clippy::new_without_default)]
pub fn new() -> Self {
gc_register_my_thread();
Self {}
@@ -200,6 +203,12 @@
Ok(o)
}
}
+
+impl Default for NixContext {
+ fn default() -> Self {
+ Self::new()
+ }
+}
impl Drop for NixContext {
fn drop(&mut self) {
unsafe {
@@ -232,6 +241,17 @@
}
// eval_s
})?;
+ ctx.run_in_context(|c| {
+ unsafe {
+ nix_raw::eval_state_builder_set_eval_setting(
+ c,
+ builder,
+ c"lazy-locks".as_ptr(),
+ c"true".as_ptr(),
+ )
+ }
+ // eval_s
+ })?;
let state = ctx
.run_in_context(|c| unsafe { eval_state_build(c, builder) })
.map(EvalState)?;
@@ -319,7 +339,7 @@
pub struct FlakeReferenceParseFlags(*mut flake_reference_parse_flags);
impl FlakeReferenceParseFlags {
- pub fn new(settings: &mut FlakeSettings) -> Result<Self> {
+ pub fn new(settings: &FlakeSettings) -> Result<Self> {
with_default_context(|c, _| unsafe { flake_reference_parse_flags_new(c, settings.0) })
.map(Self)
}
@@ -346,7 +366,11 @@
struct FlakeLockFlags(*mut flake_lock_flags);
impl FlakeLockFlags {
fn new(settings: &mut FlakeSettings) -> Result<Self> {
- with_default_context(|c, _| unsafe { flake_lock_flags_new(c, settings.0) }).map(Self)
+ let o = with_default_context(|c, _| unsafe { flake_lock_flags_new(c, settings.0) })
+ .map(Self)?;
+ with_default_context(|c, _| unsafe { flake_lock_flags_set_mode_virtual(c, o.0) })?;
+
+ Ok(o)
}
}
impl Drop for FlakeLockFlags {
@@ -381,10 +405,13 @@
pub struct FlakeReference(*mut nix_raw::flake_reference);
impl FlakeReference {
- pub fn new(s: &str, fetch: &FetchSettings) -> Result<(Self, String)> {
- let mut flake_settings = FlakeSettings::new()?;
- let parse_flags = FlakeReferenceParseFlags::new(&mut flake_settings)?;
-
+ #[instrument(name = "new-flake-reference", skip(flake, parse, fetch))]
+ pub fn new(
+ s: &str,
+ flake: &FlakeSettings,
+ parse: &FlakeReferenceParseFlags,
+ fetch: &FetchSettings,
+ ) -> Result<(Self, String)> {
let mut out = null_mut();
let mut fragment = String::new();
// let fetch_settings = fetcher_settings;
@@ -392,8 +419,8 @@
nix_raw::flake_reference_and_fragment_from_string(
c,
fetch.0,
- flake_settings.0,
- parse_flags.0,
+ flake.0,
+ parse.0,
s.as_ptr().cast(),
s.len(),
&mut out,
@@ -405,6 +432,7 @@
Ok((Self(out), fragment))
}
+ #[instrument(name = "lock-flake", skip(self, fetch))]
pub fn lock(&mut self, fetch: &FetchSettings) -> Result<LockedFlake> {
let mut settings = FlakeSettings::new()?;
let lock_flags = FlakeLockFlags::new(&mut settings)?;
crates/nix-eval/src/logging.ccdiffbeforeafterboth--- a/crates/nix-eval/src/logging.cc
+++ b/crates/nix-eval/src/logging.cc
@@ -8,19 +8,6 @@
TracingLogger() {}
bool isVerbose() override { return true; }
- // void addFields(nlohmann::json & json, const Fields & fields)
- // {
- // if (fields.empty())
- // return;
- // auto & arr = json["fields"] = nlohmann::json::array();
- // for (auto & f : fields)
- // if (f.type == Logger::Field::tInt)
- // arr.push_back(f.i);
- // else if (f.type == Logger::Field::tString)
- // arr.push_back(f.s);
- // else
- // unreachable();
- // }
void log(Verbosity lvl, std::string_view s) override {
rust::Str str(s.data(), s.size());
emit_log(lvl, str);
@@ -60,16 +47,18 @@
};
void writeToStdout(std::string_view s) override {
- printf("writeToStdout() called\n");
+ emit_warn("writeToStdout() called, but unsupported");
}
void warn(const std::string &msg) override { emit_warn(msg); }
virtual std::optional<char> ask(std::string_view s) {
- printf("ask() called\n");
+ emit_warn("ask() called, but unsupported");
return {};
}
};
extern "C" {
-void apply_tracing_logger() { logger = std::make_unique<TracingLogger>(); }
+void apply_tracing_logger() {
+ logger = std::make_unique<TracingLogger>();
+}
}
flake.lockdiffbeforeafterboth14 packageslockfile v7
Might be heavy and slow!
flake-compat
0f9255egithub.com/edolstra/flake-compat↘ 0↖ 1sourcegithub:edolstra/flake-compatchecksumsha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=used byflake-parts
644e0fcgithub.com/hercules-ci/flake-parts↘ 1↖ 1sourcegithub:hercules-ci/flake-partschecksumsha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=depends onused byflake-parts_2
49f0870https://flakehub.com/f/hercules-ci/flake-parts/0.1↘ 1↖ 1sourcehttps://flakehub.com/f/hercules-ci/flake-parts/0.1checksumsha256-F82+gS044J1APL0n4hH50GYdPRv/5JWm34oCJYmVKdE=depends onused bygit-hooks-nix
80479b6https://flakehub.com/f/cachix/git-hooks.nix/0.1.941↘ 3↖ 1sourcehttps://flakehub.com/f/cachix/git-hooks.nix/0.1.941checksumsha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=used bynix
eba1f54github.com/deltarocks/nix↘ 5↖ 2sourcegithub:deltarocks/nix/fleetused bynixpkgs
215d4d0github.com/NixOS/nixpkgs↘ 0↖ 1sourcegithub:NixOS/nixpkgschecksumsha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=used bynixpkgs
788cc73github.com/nixos/nixpkgs↘ 0↖ 4sourcegithub:nixos/nixpkgs/release-25.05checksumsha256-KCuv6iYQ0XTVAEJvDLIsk99CJm7fuqIE0/KknyeYPtM=nixpkgs
a62e6edgithub.com/NixOS/nixpkgs↘ 0↖ 1sourcegithub:NixOS/nixpkgschecksumsha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=used bynixpkgs
b1b3291https://flakehub.com/f/NixOS/nixpkgs/0.2505↘ 0↖ 3sourcehttps://flakehub.com/f/NixOS/nixpkgs/0.2505checksumsha256-wY1+2JPH0ZZC4BQefoZw/k+3+DowFyfOxv17CN/idKs=root
workspace↘ 7↖ 0rust-overlay
0ad7ab4github.com/oxalica/rust-overlay↘ 1↖ 1sourcegithub:oxalica/rust-overlaychecksumsha256-jmQeEpgX+++MEgrcikcwoSiI7vDZWLP0gci7XiWb9uQ=depends onused bytreefmt-nix
421b563github.com/numtide/treefmt-nix↘ 1↖ 1sourcegithub:numtide/treefmt-nixchecksumsha256-tzbhc4XttkyEhswByk5R38l+ztN9UDbnj0cTcP6Hp9A=depends onused by