summaryrefslogtreecommitdiff
path: root/support/pkgcheck/src/main.rs
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-12-27 03:01:20 +0000
committerNorbert Preining <norbert@preining.info>2022-12-27 03:01:20 +0000
commit9dfeafbb128537c1633d77071d8cc9b9f8c5a800 (patch)
tree56cf38eaffabfda73a52e047b3a189ba830fd0b6 /support/pkgcheck/src/main.rs
parent200df2fd74322d3c7b4bb2a69e711a40265ead1b (diff)
CTAN sync 202212270301
Diffstat (limited to 'support/pkgcheck/src/main.rs')
-rw-r--r--support/pkgcheck/src/main.rs56
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);