From ac56056fc6e67072d41b726e9c984f69df30527d Mon Sep 17 00:00:00 2001 From: Philip Metzger Date: Wed, 8 Nov 2023 20:15:16 +0100 Subject: [PATCH] run: Fix up various things. Adress the post-merge comments from #2486, which found a doc comment inaccurate and to not blindly ignore `-j 0` which would've worked until now. I've also reduced the default `jobs` size to one, as it's user-visible configuration which determines how many processes should run. Thanks to @necauqua the controversial `unsafe` usage was already removed. I've omitted to change `revisions` from an Vec to a RevisonArg for the moment, as I will keep working on the file anyway. --- cli/src/commands/run.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/cli/src/commands/run.rs b/cli/src/commands/run.rs index cd343d490a..7a1be3f4c3 100644 --- a/cli/src/commands/run.rs +++ b/cli/src/commands/run.rs @@ -39,8 +39,6 @@ pub struct RunArgs { /// The command to run across all selected revisions. shell_command: String, /// The revisions to change. - /// Multiple revsets are accepted and the work will be done on a - /// intersection of them. #[arg(long, short, default_value = "@")] revisions: Vec, /// A no-op option to match the interface of `git rebase -x`. @@ -55,16 +53,16 @@ pub fn cmd_run(ui: &mut Ui, command: &CommandHelper, args: &RunArgs) -> Result<( let workspace_command = command.workspace_helper(ui)?; let _resolved_commits = resolve_multiple_nonempty_revsets(&args.revisions, &workspace_command, ui)?; - let _jobs = if let Some(_jobs) = args.jobs { - _jobs - } else { - // Use all available cores - - // SAFETY: - // We use a internal constant of 4 threads, if it fails - let available = - std::thread::available_parallelism().unwrap_or(NonZeroUsize::new(4).unwrap()); - available.into() - }; + let _jobs = args + .jobs + .filter(|j| *j > 0) + .or_else(|| { + // Use all available cores + std::thread::available_parallelism() + .ok() + .and_then(|t| t.try_into().ok()) + }) + // Fallback to a single user-visible job. + .unwrap_or(1usize); Err(user_error("This is a stub, do not use")) }