From aa88dce21530cf26b0dbbfc9bc2d5195cdef3b77 Mon Sep 17 00:00:00 2001
From: Jiahao XU <Jiahao_XU@outlook.com>
Date: Thu, 21 Jul 2022 15:00:01 +1000
Subject: [PATCH] Add field `cli_overrides` to `binstall::Options`

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
---
 src/binstall.rs         | 3 +++
 src/binstall/resolve.rs | 6 ++----
 src/main.rs             | 8 +++-----
 3 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/binstall.rs b/src/binstall.rs
index 5de574bb..57a83e13 100644
--- a/src/binstall.rs
+++ b/src/binstall.rs
@@ -1,5 +1,7 @@
 use std::path::PathBuf;
 
+use crate::PkgOverride;
+
 mod resolve;
 pub use resolve::*;
 
@@ -11,4 +13,5 @@ pub struct Options {
     pub dry_run: bool,
     pub version: Option<String>,
     pub manifest_path: Option<PathBuf>,
+    pub cli_overrides: PkgOverride,
 }
diff --git a/src/binstall/resolve.rs b/src/binstall/resolve.rs
index 31b885bd..9e77490e 100644
--- a/src/binstall/resolve.rs
+++ b/src/binstall/resolve.rs
@@ -72,12 +72,10 @@ impl Resolution {
     }
 }
 
-#[allow(clippy::too_many_arguments)]
 pub async fn resolve(
     opts: Arc<Options>,
     crate_name: CrateName,
     desired_targets: DesiredTargets,
-    cli_overrides: Arc<PkgOverride>,
     temp_dir: Arc<Path>,
     install_path: Arc<Path>,
     client: Client,
@@ -136,7 +134,7 @@ pub async fn resolve(
             target_meta.merge(&o);
         }
 
-        target_meta.merge(&cli_overrides);
+        target_meta.merge(&opts.cli_overrides);
         debug!("Found metadata: {target_meta:?}");
 
         let fetcher_data = Data {
@@ -158,7 +156,7 @@ pub async fn resolve(
             if let Some(o) = meta.overrides.get(&fetcher_target.to_owned()).cloned() {
                 meta.merge(&o);
             }
-            meta.merge(&cli_overrides);
+            meta.merge(&opts.cli_overrides);
 
             // Generate temporary binary path
             let bin_path = temp_dir.join(format!("bin-{}", crate_name.name));
diff --git a/src/main.rs b/src/main.rs
index df166c41..4f90b51c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -203,11 +203,11 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
 
     // Load options
     let mut opts = Options::parse_from(args);
-    let cli_overrides = Arc::new(PkgOverride {
+    let cli_overrides = PkgOverride {
         pkg_url: opts.pkg_url.take(),
         pkg_fmt: opts.pkg_fmt.take(),
         bin_dir: opts.bin_dir.take(),
-    });
+    };
     let crate_names = take(&mut opts.crate_names);
     if crate_names.len() > 1 && opts.manifest_path.is_some() {
         return Err(BinstallError::ManifestPathConflictedWithBatchInstallation.into());
@@ -265,6 +265,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
         dry_run: opts.dry_run,
         version: opts.version.take(),
         manifest_path: opts.manifest_path.take(),
+        cli_overrides,
     });
 
     let tasks: Vec<_> = if !opts.dry_run && !opts.no_confirm {
@@ -276,7 +277,6 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
                     binstall_opts.clone(),
                     crate_name,
                     desired_targets.clone(),
-                    cli_overrides.clone(),
                     temp_dir_path.clone(),
                     install_path.clone(),
                     client.clone(),
@@ -317,7 +317,6 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
                 let desired_targets = desired_targets.clone();
                 let client = client.clone();
                 let crates_io_api_client = crates_io_api_client.clone();
-                let cli_overrides = cli_overrides.clone();
                 let install_path = install_path.clone();
 
                 tokio::spawn(async move {
@@ -325,7 +324,6 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
                         opts.clone(),
                         crate_name,
                         desired_targets.clone(),
-                        cli_overrides,
                         temp_dir_path,
                         install_path,
                         client,