summary refs log tree commit diff
path: root/pkgs/test/nixpkgs-check-by-name/src/structure.rs
diff options
context:
space:
mode:
authorSilvan Mosberger <silvan.mosberger@tweag.io>2023-10-20 00:55:55 +0200
committerSilvan Mosberger <silvan.mosberger@tweag.io>2023-10-24 01:15:58 +0200
commit935f82267a84a69a7aa66b2b849fc57f15d24685 (patch)
treefb959e309ea2efbeaae0deded56a4ec0b2ed01b6 /pkgs/test/nixpkgs-check-by-name/src/structure.rs
parente7d9cc96ed0f8edeb52a2dbeefdcf00e4aedf8ee (diff)
downloadnixpkgs-935f82267a84a69a7aa66b2b849fc57f15d24685.tar
nixpkgs-935f82267a84a69a7aa66b2b849fc57f15d24685.tar.gz
nixpkgs-935f82267a84a69a7aa66b2b849fc57f15d24685.tar.bz2
nixpkgs-935f82267a84a69a7aa66b2b849fc57f15d24685.tar.lz
nixpkgs-935f82267a84a69a7aa66b2b849fc57f15d24685.tar.xz
nixpkgs-935f82267a84a69a7aa66b2b849fc57f15d24685.tar.zst
nixpkgs-935f82267a84a69a7aa66b2b849fc57f15d24685.zip
tests.nixpkgs-check-by-name: Intermediate CaseSensitiveDuplicate error
Diffstat (limited to 'pkgs/test/nixpkgs-check-by-name/src/structure.rs')
-rw-r--r--pkgs/test/nixpkgs-check-by-name/src/structure.rs33
1 files changed, 21 insertions, 12 deletions
diff --git a/pkgs/test/nixpkgs-check-by-name/src/structure.rs b/pkgs/test/nixpkgs-check-by-name/src/structure.rs
index e2d03d83a53..f64f80d381a 100644
--- a/pkgs/test/nixpkgs-check-by-name/src/structure.rs
+++ b/pkgs/test/nixpkgs-check-by-name/src/structure.rs
@@ -3,7 +3,6 @@ use crate::utils;
 use crate::utils::{ErrorWriter, BASE_SUBPATH, PACKAGE_NIX_FILENAME};
 use lazy_static::lazy_static;
 use regex::Regex;
-use std::collections::HashMap;
 use std::io;
 use std::path::{Path, PathBuf};
 
@@ -79,9 +78,28 @@ impl Nixpkgs {
                 ))?;
             }
 
-            let mut unique_package_names = HashMap::new();
+            let entries = utils::read_dir_sorted(&shard_path)?;
+
+            let duplicate_check_results = entries
+                .iter()
+                .zip(entries.iter().skip(1))
+                .filter(|(l, r)| {
+                    l.file_name().to_ascii_lowercase() == r.file_name().to_ascii_lowercase()
+                })
+                .map(|(l, r)| {
+                    CheckError::CaseSensitiveDuplicate {
+                        relative_shard_path: relative_shard_path.clone(),
+                        first: l.file_name(),
+                        second: r.file_name(),
+                    }
+                    .into_result::<()>()
+                });
+
+            let duplicate_check_result = flatten_check_results(duplicate_check_results, |_| ());
 
-            for package_entry in utils::read_dir_sorted(&shard_path)? {
+            write_check_result(error_writer, duplicate_check_result)?;
+
+            for package_entry in entries {
                 let package_path = package_entry.path();
                 let package_name = package_entry.file_name().to_string_lossy().into_owned();
                 let relative_package_dir =
@@ -95,15 +113,6 @@ impl Nixpkgs {
                     continue;
                 }
 
-                if let Some(duplicate_package_name) =
-                    unique_package_names.insert(package_name.to_lowercase(), package_name.clone())
-                {
-                    error_writer.write(&format!(
-                        "{}: Duplicate case-sensitive package directories \"{duplicate_package_name}\" and \"{package_name}\".",
-                        relative_shard_path.display(),
-                    ))?;
-                }
-
                 let package_name_valid = PACKAGE_NAME_REGEX.is_match(&package_name);
                 let name_check_result = if !package_name_valid {
                     CheckError::InvalidPackageName {