bld1: building 4nb4z2d6qp87m07q8dzsv5b7dp0z682l-iets-fmt-0.2.0.drv cargoVendorDir not set, will not automatically configure vendored sources cargoArtifacts not set, will not reuse any cargo artifacts Running phase: unpackPhase unpacking source archive /nix/store/b8g5x6in896lgl1w14c3iy7rigcmksh1-source source root is source Running phase: patchPhase Executing configureCargoCommonVars Running phase: updateAutotoolsGnuConfigScriptsPhase Running phase: configurePhase default configurePhase, nothing to do Running phase: buildPhase +++ command cargo --version cargo 1.99.0 (5f94df478 2026-08-27) +++ command cargo fmt -- --check Diff in /build/source/src/remote/grpc/backend.rs:223: let mut ask: HashMap<&'a StorePath, BTreeSet> = HashMap::new(); let mut stack: Vec<&'a StorePath> = Vec::new(); let grow = |ask: &mut HashMap<&'a StorePath, BTreeSet>, - stack: &mut Vec<&'a StorePath>, - p: &'a StorePath, - names: &BTreeSet| { + stack: &mut Vec<&'a StorePath>, + p: &'a StorePath, + names: &BTreeSet| { let entry = ask.entry(p).or_default(); let before = entry.len(); entry.extend(names.iter().cloned()); Diff in /build/source/src/remote/grpc/backend.rs:302: // The static path of every needed output, or an error when a needed // output has none. Outputs nobody needs never error here. let mut paths: Vec = Vec::new(); - let mut resolve = |names: &BTreeSet, drv: &Derivation, p: &StorePath| -> Result<()> { - for name in names { - let out = drv - .outputs - .get(name) - .and_then(|o| o.path(&drv.name, name).ok()) - .flatten(); - let Some(out) = out else { - return Err(Error::Plan(format!( - "'{p}': output '{name}' has no statically known path; the build \ + let mut resolve = + |names: &BTreeSet, drv: &Derivation, p: &StorePath| -> Result<()> { + for name in names { + let out = drv + .outputs + .get(name) + .and_then(|o| o.path(&drv.name, name).ok()) + .flatten(); + let Some(out) = out else { + return Err(Error::Plan(format!( + "'{p}': output '{name}' has no statically known path; the build \ farm needs statically known input and output paths" - ))); - }; - if asked.insert(out.clone()) { - paths.push(out); + ))); + }; + if asked.insert(out.clone()) { + paths.push(out); + } } - } - Ok(()) - }; + Ok(()) + }; for (p, names) in &needs { resolve(names, &drvs[*p], p)?; } Diff in /build/source/src/remote/grpc/backend.rs:342: } } if !paths.is_empty() { - let names: Vec = - paths.iter().map(|p| p.base_name().to_string()).collect(); + let names: Vec = paths.iter().map(|p| p.base_name().to_string()).collect(); valid.extend(query(&names)?); } let mut missing: HashSet<&'a StorePath> = HashSet::new(); Diff in /build/source/src/remote/grpc/backend.rs:350: for p in needs.keys() { let drv = &drvs[*p]; let held = needs[*p].iter().all(|name| { - drv.outputs.get(name).and_then(|o| o.path(&drv.name, name).ok()).flatten().is_some_and( - |out| valid.contains(out.base_name()), - ) + drv.outputs + .get(name) + .and_then(|o| o.path(&drv.name, name).ok()) + .flatten() + .is_some_and(|out| valid.contains(out.base_name())) }); if !held { missing.insert(*p); Diff in /build/source/src/remote/grpc/backend.rs:632: assert_eq!(needs, vec!["a", "b", "c", "d", "root"]); assert_eq!( calls, - vec![vec!["root-out"], vec!["a-out"], vec!["b-out", "c-out", "d-out"]] + vec![ + vec!["root-out"], + vec!["a-out"], + vec!["b-out", "c-out", "d-out"] + ] ); } Diff in /build/source/src/remote/grpc/backend.rs:642: assert_eq!(needs, vec!["a", "b", "root"]); assert_eq!( calls, - vec![vec!["root-out"], vec!["a-out"], vec!["b-out", "c-out", "d-out"]] + vec![ + vec!["root-out"], + vec!["a-out"], + vec!["b-out", "c-out", "d-out"] + ] ); } Diff in /build/source/src/remote/grpc/backend.rs:651: /// Needs travel down through missing derivations only. fn held_mid() -> BTreeMap { let mut drvs = BTreeMap::new(); - let out = - |n: &str, p: &str| (n.to_string(), DerivationOutput::InputAddressed(sp(p))); + let out = |n: &str, p: &str| (n.to_string(), DerivationOutput::InputAddressed(sp(p))); let dep = Derivation { name: "dep".into(), outputs: [out("out", "dep-out"), out("dev", "dep-dev")].into(), Diff in /build/source/src/remote/grpc/backend.rs:698: /// in what only `dev` needs. fn two_outputs(used: &[&str]) -> BTreeMap { let mut drvs = BTreeMap::new(); - let out = - |n: &str| (n.to_string(), DerivationOutput::InputAddressed(sp(&format!("dep-{n}")))); + let out = |n: &str| { + ( + n.to_string(), + DerivationOutput::InputAddressed(sp(&format!("dep-{n}"))), + ) + }; let dep = Derivation { name: "dep".into(), outputs: [out("out"), out("dev")].into(), Diff in /build/source/src/remote/grpc/backend.rs:707: }; let root = Derivation { name: "root".into(), - outputs: [("out".to_string(), DerivationOutput::InputAddressed(sp("root-out")))].into(), + outputs: [( + "out".to_string(), + DerivationOutput::InputAddressed(sp("root-out")), + )] + .into(), input_drvs: [( sp("dep.drv"), InputNode::of(used.iter().map(|s| s.to_string()).collect()), Diff in /build/source/src/remote/grpc/backend.rs:746: fn a_used_missing_output_below_a_missing_root_is_built() { // `dep-out` is used and missing: `dep` joins `root` in the build set, // while the unused `dep-dev` is never even asked about - let (needs, calls) = run_raw( - &two_outputs(&["out"]), - &["root"], - &["dep-dev".into()], - ); + let (needs, calls) = run_raw(&two_outputs(&["out"]), &["root"], &["dep-dev".into()]); assert_eq!(needs, vec!["dep", "root"]); assert_eq!(calls, vec![vec!["root-out"], vec!["dep-out"]]); }