From 6af66fd2925773983e5400e033b992c05ca33fe5 Mon Sep 17 00:00:00 2001 From: Niklas Elsbrock Date: Sun, 10 May 2026 17:28:01 +0200 Subject: [PATCH] add `--workers` option --- Cargo.lock | 17 ----------------- Cargo.toml | 1 - src/lib.rs | 7 ++++--- src/main.rs | 22 +++++++++++++++++++--- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa27e85..40f1248 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -481,7 +481,6 @@ dependencies = [ "ctrlc", "fancy-regex", "num-integer", - "num_cpus", "rpassword", "sequoia-openpgp", ] @@ -605,12 +604,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - [[package]] name = "iana-time-zone" version = "0.1.65" @@ -994,16 +987,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "objc2" version = "0.6.4" diff --git a/Cargo.toml b/Cargo.toml index 593539e..ac2dfbe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,5 @@ clap = { version = "4.6.1", features = ["derive"] } ctrlc = "3.5.2" fancy-regex = "0.18.0" num-integer = "0.1.46" -num_cpus = "1.17.0" rpassword = "7.5.2" sequoia-openpgp = "2.2.0" diff --git a/src/lib.rs b/src/lib.rs index 6fb725a..b670e05 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,7 @@ use std::{ fmt::{self, Write}, io, - num::NonZeroU64, + num::NonZero, sync::{ atomic::{AtomicBool, AtomicU64, Ordering}, mpsc, @@ -38,9 +38,10 @@ enum Message { pub struct Config { pub regex: Regex, pub status_enabled: bool, - pub stop_after: Option, + pub stop_after: Option>, pub password: Option, pub userids: Vec, + pub workers: NonZero, } #[derive(Debug)] @@ -95,7 +96,7 @@ impl Fingerprunk { None }; - for num in 0..num_cpus::get() { + for num in 0..self.config.workers.get() { let sender = sender.clone(); thread::Builder::new() diff --git a/src/main.rs b/src/main.rs index 9540c72..7c2fc27 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,9 @@ use std::{ io::{self, IsTerminal}, - num::NonZeroU64, + num::NonZero, }; -use anyhow::{Context as AnyhowContext, anyhow}; +use anyhow::{Context, anyhow}; use clap::{ArgAction, Parser, ValueEnum}; use fancy_regex::Regex; use fingerprunk::Fingerprunk; @@ -32,7 +32,7 @@ struct Args { /// Stop once the specified number of matching keys has been found. #[arg(long)] - stop_after: Option, + stop_after: Option>, /// Prompt for a password and use it to encrypt matching keys. /// @@ -50,6 +50,13 @@ struct Args { /// Disables the warning about importing keys without user IDs into GnuPG. #[arg(long, conflicts_with = "userid", action = ArgAction::SetTrue)] no_userid: bool, + + /// Use the specified amount of worker threads. + /// + /// If not specified, the amount of worker threads will be set to the amount of the machine's + /// available parallelism. + #[arg(long)] + workers: Option>, } #[derive(ValueEnum, Clone, Copy, Debug, Default)] @@ -101,12 +108,21 @@ fn main() -> anyhow::Result<()> { None }; + let workers = match args.workers { + Some(workers) => workers, + None => std::thread::available_parallelism().context( + "unable to determine available parallelism, \ + use --workers to specify amount of worker threads", + )?, + }; + let config = fingerprunk::Config { regex: args.regex, status_enabled: args.status.evaluate(), stop_after: args.stop_after, password, userids: args.userid, + workers, }; Fingerprunk::new_from_config(config).run()?;