From 090e4adafe3ae4bf6ec0dc1a9147a9e2e9cacaff Mon Sep 17 00:00:00 2001 From: Lynne Date: Wed, 28 Apr 2021 23:19:04 +1000 Subject: [PATCH] release v0.3.0!! \0u0/ --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 14 ++++++++++---- doc/screenshot.png | Bin 0 -> 12520 bytes src/findings.rs | 2 +- src/main.rs | 11 ++++++----- src/tests/mod.rs | 21 +++++++++++++++++++++ 7 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 doc/screenshot.png diff --git a/Cargo.lock b/Cargo.lock index 54afde4..f3d30e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -193,7 +193,7 @@ dependencies = [ [[package]] name = "fif" -version = "0.2.13" +version = "0.3.0" dependencies = [ "cached", "cfg-if", diff --git a/Cargo.toml b/Cargo.toml index 47c9a7b..6dab421 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "fif" description = "A command-line tool for detecting and optionally correcting files with incorrect extensions." -version = "0.2.13" +version = "0.3.0" authors = ["Lynnesbian "] edition = "2018" license = "GPL-3.0-or-later" diff --git a/README.md b/README.md index 973a4bb..5d1f3b4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ -fif +
fif
=== +
+ +![A screenshot demonstrating fif's ability to detect the correct file extensions for a few files. +](https://gitlab.com/Lynnesbian/fif/-/blob/master/doc/screenshot.png) + [![Version](https://img.shields.io/crates/v/fif.svg?logo=rust&style=flat-square) ](https://crates.io/crates/fif) [![Minimum Supported Rust Version](https://img.shields.io/badge/msrv-1.43.0-orange?logo=rust&style=flat-square) @@ -13,7 +18,8 @@ fif [![Unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg?style=flat-square) ](https://github.com/rust-secure-code/safety-dance/) -A command-line tool for detecting and optionally correcting files with incorrect extensions. +*A command-line tool for detecting and optionally correcting files with incorrect extensions.* +
fif recursively scans the given directory and outputs a shell script to fix the name of any files with incorrect extensions. By default, fif will scan all non-hidden files in the given directory, and will ignore symlinks. @@ -29,8 +35,8 @@ that it's not doing anything that will give you a headache before running it. cargo install --locked fif ``` -To update, simply re-run this command, or use a tool like -[cargo-update](https://github.com/nabijaczleweli/cargo-update). +To update, simply re-run this command, or use a tool like [cargo-update +](https://github.com/nabijaczleweli/cargo-update). #### Other backends `fif` supports using [`infer`](https://crates.io/crates/infer) or [`xdg-mime`](https://crates.io/crates/xdg-mime) as its diff --git a/doc/screenshot.png b/doc/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..0297739192b74b9f66fb841e54644ad850902be8 GIT binary patch literal 12520 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 { impl<'a> Findings<'a> { pub fn recommended_extension(&self) -> Option { - mime_extension_lookup(self.mime.clone()).map(|extensions| extensions[0].to_owned()) + mime_extension_lookup(self.mime.clone()).map(|extensions| extensions[0].clone()) } } diff --git a/src/main.rs b/src/main.rs index 2a07ded..93832ed 100644 --- a/src/main.rs +++ b/src/main.rs @@ -74,6 +74,7 @@ fn main() { // .target(env_logger::Target::Stdout) // log to stdout rather than stderr .init(); + trace!("Initialise mimetype database"); init_db(); debug!("Iterating directory: {:?}", args.dirs); @@ -121,6 +122,8 @@ fn main() { ) .collect(); + trace!("Scanning complete"); + for result in &results { match result { Ok(r) => { @@ -276,13 +279,11 @@ fn scan_from_walkdir(entries: &[DirEntry]) -> Vec> { if #[cfg(feature = "multi-threaded")] { use rayon::prelude::*; - // rather than using a standard par_iter, split the entries into chunks of 32 first. - // this allows each spawned thread to handle 32 files before before closing, rather than creating a new thread for - // each file. this leads to a pretty substantial speedup that i'm pretty substantially happy about 0u0 + // split the entries into chunks of 32, and iterate over each chunk of entries in a separate thread entries - .par_chunks(32) // split into chunks of 32 + .par_chunks(32) .flat_map(|chunk| { - chunk // return Vec<...> instead of Chunk> + chunk .iter() // iter over the chunk, which is a slice of DirEntry structs .map(|entry| scan_file(entry)) .collect::>() diff --git a/src/tests/mod.rs b/src/tests/mod.rs index c97bc14..5983882 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -387,3 +387,24 @@ fn writables_is_correct() { writables!["henlo", (Path::new("henlo")), Newline, Space] ) } + +#[test] +/// Test various combinations of verbosity flags. +fn verbosity() { + assert!(Parameters::try_parse_from(&["fif", "-q", "-v"]).is_err(), "Failed to reject usage of both -q and -v!"); + + let mut expected_results = HashMap::new(); + expected_results.insert("-qqqqqqqq", "off"); + expected_results.insert("-qqq", "off"); + expected_results.insert("-qq", "error"); + expected_results.insert("-q", "warn"); + expected_results.insert("-s", "info"); + expected_results.insert("-v", "debug"); + expected_results.insert("-vv", "trace"); + expected_results.insert("-vvv", "trace"); + expected_results.insert("-vvvvvvvv", "trace"); + + for (flags, level) in expected_results { + assert_eq!(Parameters::parse_from(&["fif", flags]).default_verbosity(), level) + } +}