tests.nixpkgs-check-by-name: Make reference check part of structural check

This commit is contained in:
Silvan Mosberger
2023-10-24 01:18:13 +02:00
parent 0475238ec0
commit d65f3ddb89
3 changed files with 24 additions and 26 deletions
+3 -9
View File
@@ -6,7 +6,7 @@ mod utils;
use crate::structure::check_structure;
use anyhow::Context;
use check_result::{flatten_check_results, write_check_result};
use check_result::write_check_result;
use clap::{Parser, ValueEnum};
use colored::Colorize;
use std::io;
@@ -91,14 +91,8 @@ pub fn check_nixpkgs<W: io::Write>(
let check_result = check_structure(&nixpkgs_path);
if let Some(nixpkgs) = write_check_result(&mut error_writer, check_result)? {
// Only if we could successfully parse the structure, we do the semantic checks
let check_result = flatten_check_results(
[
eval::check_values(version, &nixpkgs, eval_accessible_paths),
references::check_references(&nixpkgs),
],
|_| (),
);
// Only if we could successfully parse the structure, we do the evaluation checks
let check_result = eval::check_values(version, &nixpkgs, eval_accessible_paths);
write_check_result(&mut error_writer, check_result)?;
}
}
@@ -1,5 +1,4 @@
use crate::check_result::{flatten_check_results, pass, CheckError, CheckResult};
use crate::structure::Nixpkgs;
use crate::utils;
use crate::utils::LineIndex;
@@ -19,23 +18,21 @@ struct PackageContext<'a> {
/// Check that every package directory in pkgs/by-name doesn't link to outside that directory.
/// Both symlinks and Nix path expressions are checked.
pub fn check_references(nixpkgs: &Nixpkgs) -> CheckResult<()> {
// Check the directories for each package separately
let check_results = nixpkgs.package_names.iter().map(|package_name| {
let relative_package_dir = Nixpkgs::relative_dir_for_package(package_name);
let context = PackageContext {
relative_package_dir: &relative_package_dir,
absolute_package_dir: &nixpkgs.path.join(&relative_package_dir),
};
pub fn check_references(
relative_package_dir: &Path,
absolute_package_dir: &Path,
) -> CheckResult<()> {
let context = PackageContext {
relative_package_dir: &relative_package_dir.to_path_buf(),
absolute_package_dir: &absolute_package_dir.to_path_buf(),
};
// The empty argument here is the subpath under the package directory to check
// An empty one means the package directory itself
check_path(&context, Path::new("")).context(format!(
"While checking the references in package directory {}",
relative_package_dir.display()
))
});
flatten_check_results(check_results, |_| ())
// The empty argument here is the subpath under the package directory to check
// An empty one means the package directory itself
check_path(&context, Path::new("")).context(format!(
"While checking the references in package directory {}",
relative_package_dir.display()
))
}
/// Checks for a specific path to not have references outside
@@ -1,6 +1,7 @@
use crate::check_result::{
flatten_check_results, pass, sequence_check_results, CheckError, CheckResult,
};
use crate::references;
use crate::utils;
use crate::utils::{BASE_SUBPATH, PACKAGE_NIX_FILENAME};
use lazy_static::lazy_static;
@@ -154,11 +155,17 @@ pub fn check_structure(path: &Path) -> CheckResult<Nixpkgs> {
pass(())
};
let reference_check_result = references::check_references(
&relative_package_dir,
&path.join(&relative_package_dir),
);
flatten_check_results(
[
name_check_result,
shard_check_result,
package_nix_check_result,
reference_check_result,
],
|_| package_name.clone(),
)