diff options
author | Norbert Preining <norbert@preining.info> | 2022-12-27 03:01:20 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-12-27 03:01:20 +0000 |
commit | 9dfeafbb128537c1633d77071d8cc9b9f8c5a800 (patch) | |
tree | 56cf38eaffabfda73a52e047b3a189ba830fd0b6 /support/pkgcheck/src/main.rs | |
parent | 200df2fd74322d3c7b4bb2a69e711a40265ead1b (diff) |
CTAN sync 202212270301
Diffstat (limited to 'support/pkgcheck/src/main.rs')
-rw-r--r-- | support/pkgcheck/src/main.rs | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/support/pkgcheck/src/main.rs b/support/pkgcheck/src/main.rs index f0766cdeba..9ff8390f9c 100644 --- a/support/pkgcheck/src/main.rs +++ b/support/pkgcheck/src/main.rs @@ -83,14 +83,14 @@ fn format_message(message: &Arguments, no_color: bool) -> Cow<'static, str> { } } -#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct TdsException { pub pkg: String, pub tpkg: String, } -#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct PathExceptions { pub tds_path_exceptions: Vec<TdsException>, @@ -122,19 +122,21 @@ fn get_config_file_name() -> Option<String> { fn read_yaml_config() -> FxHashMap<String, String> { let mut pkg_replacements: FxHashMap<String, String> = FxHashMap::default(); for (p, q) in [ + ("armtex", "armenian"), ("babel-base", "babel"), - ("latex-base", "latex"), - ("latex-lab", "latex"), - ("latex-tools", "latex"), - ("latex-graphics", "latex"), ("latex-amsmath", "latex"), - ("latex-firstaid", "latex/firstaid"), + ("latex-amsmath-dev", "latex-dev"), + ("latex-base", "latex"), ("latex-base-dev", "latex-dev"), + ("latex-cyrillic", "cyrillic"), + ("latex-firstaid", "latex/firstaid"), + ("latex-firstaid-dev", "latex-dev/firstaid"), + ("latex-graphics", "latex"), + ("latex-graphics-dev", "latex-dev"), + ("latex-lab", "latex"), ("latex-lab-dev", "latex-dev"), + ("latex-tools", "latex"), ("latex-tools-dev", "latex-dev"), - ("latex-graphics-dev", "latex-dev"), - ("latex-amsmath-dev", "latex-dev"), - ("latex-firstaid-dev", "latex-dev/firstaid"), ("vntex-nonfree", "vntex"), ] { pkg_replacements.insert(p.to_string(), q.to_string()); @@ -209,7 +211,7 @@ const BLOCKSIZE: usize = 4096; fn hash_file_inner(path: &Path) -> io::Result<Vec<u8>> { let mut buf = [0u8; BLOCKSIZE]; - let mut fp = File::open(&path)?; + let mut fp = File::open(path)?; let mut digest = blake3::Hasher::new(); loop { match fp.read(&mut buf)? { @@ -357,7 +359,7 @@ struct Args { group = "only_one" )] explain_all: bool, - #[clap(long = "generate-completion", group = "only_one", arg_enum)] + #[clap(long = "generate-completion", group = "only_one", value_enum)] generator: Option<Shell>, #[clap( long = "show-temp-endings", @@ -371,11 +373,11 @@ struct Args { config_file: Option<String>, } -// We take care to avoid visiting a single inode twice, -// which takes care of (false positive) hardlinks. +// In the pas we took care to avoid visiting a single inode twice, which takes care of (false positive) hardlinks. +// Now we want to know if there is a hardlink in the package directory #[cfg(unix)] -fn check_inode(set: &mut FxHashSet<(u64, u64)>, meta: &Metadata) -> bool { - set.insert((get_devno(meta), meta.ino())) +fn check_inode(set: &mut FxHashMap<(u64, u64), Vec<String>>, filename: &str, meta: &Metadata) { + set.entry((get_devno(meta), meta.ino())).or_insert_with(Vec::new).push(filename.to_string()); } #[cfg(not(unix))] @@ -616,7 +618,7 @@ fn check_generated_files(entry: &str, generated: &mut GeneratedHashMap) { // the name of the .ins resp. .dtx without extension let entry_base = &entry_fname[0..entry_fname.len() - 4]; - let fhdl = File::open(&entry); + let fhdl = File::open(entry); match fhdl { Ok(mut f) => { let mut buf = Vec::new(); @@ -1076,7 +1078,7 @@ fn check_package(root: &str, tds_zip: &Option<String>) -> Option<DupHashes> { let mut doublenames: FxHashMap<PathBuf, Vec<PathBuf>> = FxHashMap::default(); - let mut inodes = FxHashSet::default(); + let mut inodes = FxHashMap::default(); let ut = Utils::new(utils::CheckType::Package); @@ -1116,9 +1118,7 @@ fn check_package(root: &str, tds_zip: &Option<String>) -> Option<DupHashes> { } }; - if !check_inode(&mut inodes, &meta) { - continue; - } + check_inode(&mut inodes, dir_entry_str, &meta); // this is the file_name without the directory part // unwrap() is ok here as we covered potential UTF-8 related errors @@ -1441,6 +1441,7 @@ fn check_package(root: &str, tds_zip: &Option<String>) -> Option<DupHashes> { print_casefolding(&lcnames); print_generated(&doublenames, &generated); + print_hardlinks(&inodes); if !ARGS.ignore_same_named { print_doublenames(&doublenames); } @@ -1487,6 +1488,19 @@ fn check_package(root: &str, tds_zip: &Option<String>) -> Option<DupHashes> { Some(hashes) } +fn print_hardlinks(hashes: &FxHashMap<(u64, u64), Vec<String>>) { + for ((_devid,inode), eles) in hashes.iter() { + if eles.len() > 1 { + w0010!(inode); + for hfile in eles.iter() { + info!(" >>> {}", &hfile); + } + + } + + } +} + fn print_casefolding(hashes: &FxHashMap<PathBuf, Vec<(PathBuf, FileKind)>>) { for (k, eles) in hashes.iter() { //println!("pcf: {:?}, {:?}", k, &eles); |