tests.nixpkgs-check-by-name: Minor refactor
Allows a smaller diff for future changes
This commit is contained in:
parent
21d520fbf2
commit
6710bc250a
@ -18,19 +18,23 @@ let
|
||||
callPackage = fn: args:
|
||||
let
|
||||
result = super.callPackage fn args;
|
||||
variantInfo._attributeVariant = {
|
||||
# These names are used by the deserializer on the Rust side
|
||||
CallPackage.path =
|
||||
if builtins.isPath fn then
|
||||
toString fn
|
||||
else
|
||||
null;
|
||||
};
|
||||
in
|
||||
if builtins.isAttrs result then
|
||||
# If this was the last overlay to be applied, we could just only return the `_callPackagePath`,
|
||||
# but that's not the case because stdenv has another overlays on top of user-provided ones.
|
||||
# So to not break the stdenv build we need to return the mostly proper result here
|
||||
result // {
|
||||
_callPackagePath = fn;
|
||||
}
|
||||
result // variantInfo
|
||||
else
|
||||
# It's very rare that callPackage doesn't return an attribute set, but it can occur.
|
||||
{
|
||||
_callPackagePath = fn;
|
||||
};
|
||||
variantInfo;
|
||||
};
|
||||
|
||||
pkgs = import nixpkgsPath {
|
||||
@ -45,11 +49,7 @@ let
|
||||
in
|
||||
{
|
||||
# These names are used by the deserializer on the Rust side
|
||||
call_package_path =
|
||||
if value ? _callPackagePath && builtins.isPath value._callPackagePath then
|
||||
toString value._callPackagePath
|
||||
else
|
||||
null;
|
||||
variant = value._attributeVariant or { Other = null; };
|
||||
is_derivation = pkgs.lib.isDerivation value;
|
||||
};
|
||||
|
||||
|
@ -13,10 +13,19 @@ use tempfile::NamedTempFile;
|
||||
/// Attribute set of this structure is returned by eval.nix
|
||||
#[derive(Deserialize)]
|
||||
struct AttributeInfo {
|
||||
call_package_path: Option<PathBuf>,
|
||||
variant: AttributeVariant,
|
||||
is_derivation: bool,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
enum AttributeVariant {
|
||||
/// The attribute is defined as a pkgs.callPackage <path>
|
||||
/// The path is None when the <path> argument isn't a path
|
||||
CallPackage { path: Option<PathBuf> },
|
||||
/// The attribute is not defined as pkgs.callPackage
|
||||
Other,
|
||||
}
|
||||
|
||||
const EXPR: &str = include_str!("eval.nix");
|
||||
|
||||
/// Check that the Nixpkgs attribute values corresponding to the packages in pkgs/by-name are
|
||||
@ -97,14 +106,18 @@ pub fn check_values<W: io::Write>(
|
||||
let absolute_package_file = nixpkgs.path.join(&relative_package_file);
|
||||
|
||||
if let Some(attribute_info) = actual_files.get(package_name) {
|
||||
let is_expected_file =
|
||||
if let Some(call_package_path) = &attribute_info.call_package_path {
|
||||
absolute_package_file == *call_package_path
|
||||
} else {
|
||||
false
|
||||
};
|
||||
let valid = match &attribute_info.variant {
|
||||
AttributeVariant::CallPackage { path } => {
|
||||
if let Some(call_package_path) = path {
|
||||
absolute_package_file == *call_package_path
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
AttributeVariant::Other => false,
|
||||
};
|
||||
|
||||
if !is_expected_file {
|
||||
if !valid {
|
||||
error_writer.write(&format!(
|
||||
"pkgs.{package_name}: This attribute is not defined as `pkgs.callPackage {} {{ ... }}`.",
|
||||
relative_package_file.display()
|
||||
|
Loading…
Reference in New Issue
Block a user