diff options
author | Silvan Mosberger <silvan.mosberger@tweag.io> | 2024-01-03 19:34:45 +0100 |
---|---|---|
committer | Silvan Mosberger <silvan.mosberger@tweag.io> | 2024-01-10 19:28:19 +0100 |
commit | 69fc71a82c0e3acba5045666b48cdaf5adc8d4c3 (patch) | |
tree | cad47181d85d190a8136af4df3a67ef06fc8316f /pkgs/test | |
parent | da3e72b9150c382b04e7a0138a8309d8b804359f (diff) | |
download | nixlib-69fc71a82c0e3acba5045666b48cdaf5adc8d4c3.tar nixlib-69fc71a82c0e3acba5045666b48cdaf5adc8d4c3.tar.gz nixlib-69fc71a82c0e3acba5045666b48cdaf5adc8d4c3.tar.bz2 nixlib-69fc71a82c0e3acba5045666b48cdaf5adc8d4c3.tar.lz nixlib-69fc71a82c0e3acba5045666b48cdaf5adc8d4c3.tar.xz nixlib-69fc71a82c0e3acba5045666b48cdaf5adc8d4c3.tar.zst nixlib-69fc71a82c0e3acba5045666b48cdaf5adc8d4c3.zip |
tests.nixpkgs-check-by-name: Basic info for non-by-name attributes
In a future commit this will be extended
Diffstat (limited to 'pkgs/test')
-rw-r--r-- | pkgs/test/nixpkgs-check-by-name/src/eval.nix | 27 | ||||
-rw-r--r-- | pkgs/test/nixpkgs-check-by-name/src/eval.rs | 26 | ||||
-rw-r--r-- | pkgs/test/nixpkgs-check-by-name/src/ratchet.rs | 6 |
3 files changed, 41 insertions, 18 deletions
diff --git a/pkgs/test/nixpkgs-check-by-name/src/eval.nix b/pkgs/test/nixpkgs-check-by-name/src/eval.nix index 7707dc732b70..9c0248486c66 100644 --- a/pkgs/test/nixpkgs-check-by-name/src/eval.nix +++ b/pkgs/test/nixpkgs-check-by-name/src/eval.nix @@ -79,15 +79,26 @@ let }; }; - attrInfos = map (name: [ + byNameAttrs = map (name: [ name - ( - if ! pkgs ? ${name} then - { Missing = null; } - else - { Existing = attrInfo name pkgs.${name}; } - ) + { + ByName = + if ! pkgs ? ${name} then + { Missing = null; } + else + { Existing = attrInfo name pkgs.${name}; }; + } ]) attrs; + # Information on all attributes that exist but are not in pkgs/by-name. + # We need this to enforce pkgs/by-name for new packages + nonByNameAttrs = map (name: + [ + name + { + NonByName = null; + } + ] + ) (builtins.attrNames (builtins.removeAttrs pkgs attrs)); in -attrInfos +byNameAttrs ++ nonByNameAttrs diff --git a/pkgs/test/nixpkgs-check-by-name/src/eval.rs b/pkgs/test/nixpkgs-check-by-name/src/eval.rs index 65f71ccafc6f..fdf74eba2cb5 100644 --- a/pkgs/test/nixpkgs-check-by-name/src/eval.rs +++ b/pkgs/test/nixpkgs-check-by-name/src/eval.rs @@ -12,6 +12,14 @@ use tempfile::NamedTempFile; /// Attribute set of this structure is returned by eval.nix #[derive(Deserialize)] +enum Attribute { + /// An attribute that should be defined via pkgs/by-name + ByName(ByNameAttribute), + /// An attribute not defined via pkgs/by-name + NonByName, +} + +#[derive(Deserialize)] enum ByNameAttribute { /// The attribute doesn't exist at all Missing, @@ -120,7 +128,7 @@ pub fn check_values( anyhow::bail!("Failed to run command {command:?}"); } // Parse the resulting JSON value - let attributes: Vec<(String, ByNameAttribute)> = serde_json::from_slice(&result.stdout) + let attributes: Vec<(String, Attribute)> = serde_json::from_slice(&result.stdout) .with_context(|| { format!( "Failed to deserialise {}", @@ -133,30 +141,34 @@ pub fn check_values( let relative_package_file = structure::relative_file_for_package(&attribute_name); use ratchet::RatchetState::*; + use Attribute::*; use AttributeInfo::*; use ByNameAttribute::*; use CallPackageVariant::*; let check_result = match attribute_value { - Missing => NixpkgsProblem::UndefinedAttr { + NonByName => Success(ratchet::Package { + empty_non_auto_called: Tight, + }), + ByName(Missing) => NixpkgsProblem::UndefinedAttr { relative_package_file: relative_package_file.clone(), package_name: attribute_name.clone(), } .into(), - Existing(NonAttributeSet) => NixpkgsProblem::NonDerivation { + ByName(Existing(NonAttributeSet)) => NixpkgsProblem::NonDerivation { relative_package_file: relative_package_file.clone(), package_name: attribute_name.clone(), } .into(), - Existing(NonCallPackage) => NixpkgsProblem::WrongCallPackage { + ByName(Existing(NonCallPackage)) => NixpkgsProblem::WrongCallPackage { relative_package_file: relative_package_file.clone(), package_name: attribute_name.clone(), } .into(), - Existing(CallPackage(CallPackageInfo { + ByName(Existing(CallPackage(CallPackageInfo { is_derivation, call_package_variant, - })) => { + }))) => { let check_result = if !is_derivation { NixpkgsProblem::NonDerivation { relative_package_file: relative_package_file.clone(), @@ -203,7 +215,7 @@ pub fn check_values( )); Ok(check_result.map(|elems| ratchet::Nixpkgs { - package_names, + package_names: elems.iter().map(|(name, _)| name.to_owned()).collect(), 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 85feb0eee62f..46d71baae1b5 100644 --- a/pkgs/test/nixpkgs-check-by-name/src/ratchet.rs +++ b/pkgs/test/nixpkgs-check-by-name/src/ratchet.rs @@ -10,7 +10,7 @@ use std::collections::HashMap; /// The ratchet value for the entirety of Nixpkgs. #[derive(Default)] pub struct Nixpkgs { - /// Sorted list of attributes in package_map + /// Sorted list of packages in package_map pub package_names: Vec<String>, /// The ratchet values for all packages pub package_map: HashMap<String, Package>, @@ -29,14 +29,14 @@ impl Nixpkgs { } } -/// The ratchet value for a single package in `pkgs/by-name` +/// The ratchet value for a top-level package pub struct Package { /// The ratchet value for the check for non-auto-called empty arguments pub empty_non_auto_called: RatchetState<EmptyNonAutoCalled>, } impl Package { - /// Validates the ratchet checks for a single package defined in `pkgs/by-name` + /// Validates the ratchet checks for a top-level package pub fn compare(name: &str, optional_from: Option<&Self>, to: &Self) -> Validation<()> { RatchetState::<EmptyNonAutoCalled>::compare( name, |