Commit d65f3ddb authored by Silvan Mosberger's avatar Silvan Mosberger
Browse files

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

parent 0475238e
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -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)?;
        }
    }
+14 −17
Original line number Diff line number Diff line
use crate::check_result::{flatten_check_results, pass, CheckError, CheckResult};
use crate::structure::Nixpkgs;
use crate::utils;
use crate::utils::LineIndex;

@@ -19,13 +18,13 @@ 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);
pub fn check_references(
    relative_package_dir: &Path,
    absolute_package_dir: &Path,
) -> CheckResult<()> {
    let context = PackageContext {
            relative_package_dir: &relative_package_dir,
            absolute_package_dir: &nixpkgs.path.join(&relative_package_dir),
        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
@@ -34,8 +33,6 @@ pub fn check_references(nixpkgs: &Nixpkgs) -> CheckResult<()> {
        "While checking the references in package directory {}",
        relative_package_dir.display()
    ))
    });
    flatten_check_results(check_results, |_| ())
}

/// Checks for a specific path to not have references outside
+7 −0
Original line number Diff line number Diff line
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(),
                        )