diff options
author | Silvan Mosberger <silvan.mosberger@tweag.io> | 2024-01-05 00:50:41 +0100 |
---|---|---|
committer | Silvan Mosberger <silvan.mosberger@tweag.io> | 2024-01-05 02:01:55 +0100 |
commit | 27c873af995394445eef05eaa1b95997f57e868a (patch) | |
tree | 8581072facffd9e7b11aa083ff839e6278075749 /pkgs/test | |
parent | 2a8f4693486c4b4ba84586ed5b2312e82b77e3ef (diff) |
tests.nixpkgs-check-by-name: Deterministic ordering
Makes errors for attributes deterministic so it's easier to test (also, reproducibility is always nice)
Diffstat (limited to 'pkgs/test')
-rw-r--r-- | pkgs/test/nixpkgs-check-by-name/src/eval.nix | 11 | ||||
-rw-r--r-- | pkgs/test/nixpkgs-check-by-name/src/eval.rs | 6 | ||||
-rw-r--r-- | pkgs/test/nixpkgs-check-by-name/src/ratchet.rs | 12 |
3 files changed, 16 insertions, 13 deletions
diff --git a/pkgs/test/nixpkgs-check-by-name/src/eval.nix b/pkgs/test/nixpkgs-check-by-name/src/eval.nix index e75a28ddbdf71..b605a35a322a7 100644 --- a/pkgs/test/nixpkgs-check-by-name/src/eval.nix +++ b/pkgs/test/nixpkgs-check-by-name/src/eval.nix @@ -76,14 +76,15 @@ let }; }; - attrInfos = builtins.listToAttrs (map (name: { - inherit name; - value = + attrInfos = map (name: [ + name + ( if ! pkgs ? ${name} then { Missing = null; } else - { Existing = attrInfo name pkgs.${name}; }; - }) attrs); + { Existing = attrInfo name pkgs.${name}; } + ) + ]) attrs; in attrInfos diff --git a/pkgs/test/nixpkgs-check-by-name/src/eval.rs b/pkgs/test/nixpkgs-check-by-name/src/eval.rs index 00bdc0bc9f394..4004841c94304 100644 --- a/pkgs/test/nixpkgs-check-by-name/src/eval.rs +++ b/pkgs/test/nixpkgs-check-by-name/src/eval.rs @@ -6,7 +6,6 @@ use std::path::Path; use anyhow::Context; use serde::Deserialize; -use std::collections::HashMap; use std::path::PathBuf; use std::process; use tempfile::NamedTempFile; @@ -119,7 +118,7 @@ pub fn check_values( anyhow::bail!("Failed to run command {command:?}"); } // Parse the resulting JSON value - let attributes: HashMap<String, ByNameAttribute> = serde_json::from_slice(&result.stdout) + let attributes: Vec<(String, ByNameAttribute)> = serde_json::from_slice(&result.stdout) .context(format!( "Failed to deserialise {}", String::from_utf8_lossy(&result.stdout) @@ -201,6 +200,7 @@ pub fn check_values( )); Ok(check_result.map(|elems| ratchet::Nixpkgs { - packages: elems.into_iter().collect(), + package_names, + package_map: elems.into_iter().collect(), })) } diff --git a/pkgs/test/nixpkgs-check-by-name/src/ratchet.rs b/pkgs/test/nixpkgs-check-by-name/src/ratchet.rs index c363f85466e92..ae0c29cb6f35a 100644 --- a/pkgs/test/nixpkgs-check-by-name/src/ratchet.rs +++ b/pkgs/test/nixpkgs-check-by-name/src/ratchet.rs @@ -10,8 +10,10 @@ use std::collections::HashMap; /// The ratchet value for the entirety of Nixpkgs. #[derive(Default)] pub struct Nixpkgs { - /// The ratchet values for each package in `pkgs/by-name` - pub packages: HashMap<String, Package>, + /// Sorted list of attributes in package_map + pub package_names: Vec<String>, + /// The ratchet values for all packages + pub package_map: HashMap<String, Package>, } impl Nixpkgs { @@ -20,9 +22,9 @@ impl Nixpkgs { validation::sequence_( // We only loop over the current attributes, // we don't need to check ones that were removed - to.packages - .into_iter() - .map(|(name, attr_to)| Package::compare(&name, from.packages.get(&name), &attr_to)), + to.package_names.into_iter().map(|name| { + Package::compare(&name, from.package_map.get(&name), &to.package_map[&name]) + }), ) } } |