diff --git a/crates/client/src/config.rs b/crates/client/src/config.rs index 729f01da..336fc450 100644 --- a/crates/client/src/config.rs +++ b/crates/client/src/config.rs @@ -121,7 +121,12 @@ pub struct Config { /// Auto accept registry hint or ask the user to confirm #[serde(default)] - pub auto_accept_federation_hints: bool, + pub disable_auto_accept_federation_hints: bool, + + /// Automatically attempt package initialize if does not exist + /// or ask the user to confirm first + #[serde(default)] + pub disable_auto_package_init: bool, /// Disable interactive prompts. #[serde(default)] @@ -209,7 +214,8 @@ impl Config { keys: self.keys.clone(), keyring_auth: self.keyring_auth, ignore_federation_hints: self.ignore_federation_hints, - auto_accept_federation_hints: self.auto_accept_federation_hints, + disable_auto_accept_federation_hints: self.disable_auto_accept_federation_hints, + disable_auto_package_init: self.disable_auto_package_init, disable_interactive: self.disable_interactive, keyring_backend: self.keyring_backend.clone(), }; diff --git a/crates/client/src/lib.rs b/crates/client/src/lib.rs index 94b76297..68abd015 100644 --- a/crates/client/src/lib.rs +++ b/crates/client/src/lib.rs @@ -73,7 +73,8 @@ where namespace_map: N, api: api::Client, ignore_federation_hints: bool, - auto_accept_federation_hints: bool, + disable_auto_accept_federation_hints: bool, + disable_auto_package_init: bool, disable_interactive: bool, keyring_backend: Option, keys: IndexSet, @@ -90,7 +91,8 @@ impl Client>, ignore_federation_hints: bool, - auto_accept_federation_hints: bool, + disable_auto_accept_federation_hints: bool, + disable_auto_package_init: bool, disable_interactive: bool, keyring_backend: Option, keys: IndexSet, @@ -102,7 +104,8 @@ impl Client Client { if !initializing { - if self.disable_interactive || cfg!(not(feature = "cli-interactive")) { - return Err(ClientError::MustInitializePackage { - name, - has_auth_token, - }); - } - - #[cfg(feature = "cli-interactive")] - { - use crate::storage::PublishEntry; - use dialoguer::{theme::ColorfulTheme, Confirm}; - - if accepted_prompt_to_initialize - || Confirm::with_theme(&ColorfulTheme::default()) - .with_prompt(format!( - "Package `{package_name}` was not found. -If it exists, you may not have access. -Attempt to create `{package_name}` and publish the release y/N\n", - package_name = &info.name, - )) - .default(false) - .interact() - .unwrap() - { - info.entries.insert(0, PublishEntry::Init); - initializing = true; - accepted_prompt_to_initialize = true; - } else { + if !self.disable_auto_package_init { + info.entries.insert(0, crate::storage::PublishEntry::Init); + initializing = true; + accepted_prompt_to_initialize = true; + } else { + if self.disable_interactive || cfg!(not(feature = "cli-interactive")) { return Err(ClientError::MustInitializePackage { name, has_auth_token, }); } + + #[cfg(feature = "cli-interactive")] + { + use crate::storage::PublishEntry; + use dialoguer::{theme::ColorfulTheme, Confirm}; + + if accepted_prompt_to_initialize + || Confirm::with_theme(&ColorfulTheme::default()) + .with_prompt(format!( + "Package `{package_name}` was not found. + If it exists, you may not have access. + Attempt to create `{package_name}` and publish the release y/N\n", + package_name = &info.name, + )) + .default(false) + .interact() + .unwrap() + { + info.entries.insert(0, PublishEntry::Init); + initializing = true; + accepted_prompt_to_initialize = true; + } else { + return Err(ClientError::MustInitializePackage { + name, + has_auth_token, + }); + } + } } } PackageInfo::new(info.name.clone()) @@ -936,7 +945,7 @@ Attempt to create `{package_name}` and publish the release y/N\n", let package_name = &packages.get(log_id).unwrap().name; - if self.auto_accept_federation_hints + if !self.disable_auto_accept_federation_hints || Confirm::with_theme(&ColorfulTheme::default()) .with_prompt(format!( "Package `{package_name}` is not in `{current_registry}` registry. @@ -1446,7 +1455,8 @@ impl FileSystemClient { namespace_map, auth_token, config.ignore_federation_hints, - config.auto_accept_federation_hints, + config.disable_auto_accept_federation_hints, + config.disable_auto_package_init, disable_interactive, keyring_backend, keys, @@ -1510,7 +1520,8 @@ impl FileSystemClient { FileSystemNamespaceMapStorage::new(namespace_map_path), auth_token, config.ignore_federation_hints, - config.auto_accept_federation_hints, + config.disable_auto_accept_federation_hints, + config.disable_auto_package_init, disable_interactive, keyring_backend, keys, diff --git a/crates/transparency/src/log/mod.rs b/crates/transparency/src/log/mod.rs index f22ce48e..12f9d18e 100644 --- a/crates/transparency/src/log/mod.rs +++ b/crates/transparency/src/log/mod.rs @@ -6,6 +6,7 @@ //! //! Implementations: //! * [`InOrderLog`] - +//! //! The only implementation in this module is , //! which is a [`VerifiableLog`] whose contents are structured //! using binary in-order interval numbering as described in diff --git a/src/commands/config.rs b/src/commands/config.rs index f8f48765..c37ea99f 100644 --- a/src/commands/config.rs +++ b/src/commands/config.rs @@ -23,9 +23,14 @@ pub struct ConfigCommand { #[clap(long)] pub ignore_federation_hints: Option, - /// Auto accept federation hints. + /// Disable auto accept federation hints. #[clap(long)] - pub auto_accept_federation_hints: Option, + pub disable_auto_accept_federation_hints: Option, + + /// Automatically attempt package initialize if does not exist + /// or ask the user to confirm first. + #[clap(long)] + pub disable_auto_package_init: Option, /// Overwrite the existing configuration file. #[clap(long)] @@ -86,7 +91,10 @@ impl ConfigCommand { keys: self.common.read_config()?.keys, keyring_auth: false, ignore_federation_hints: self.ignore_federation_hints.unwrap_or_default(), - auto_accept_federation_hints: self.auto_accept_federation_hints.unwrap_or_default(), + disable_auto_accept_federation_hints: self + .disable_auto_accept_federation_hints + .unwrap_or_default(), + disable_auto_package_init: self.disable_auto_package_init.unwrap_or_default(), disable_interactive: false, keyring_backend: self.keyring_backend, } @@ -120,8 +128,13 @@ impl ConfigCommand { if let Some(ignore_federation_hints) = self.ignore_federation_hints { config.ignore_federation_hints = ignore_federation_hints; } - if let Some(auto_accept_federation_hints) = self.auto_accept_federation_hints { - config.auto_accept_federation_hints = auto_accept_federation_hints; + if let Some(disable_auto_accept_federation_hints) = + self.disable_auto_accept_federation_hints + { + config.disable_auto_accept_federation_hints = disable_auto_accept_federation_hints; + } + if let Some(disable_auto_package_init) = self.disable_auto_package_init { + config.disable_auto_package_init = disable_auto_package_init; } if self.keyring_backend.is_some() { config.keyring_backend = self.keyring_backend; diff --git a/src/commands/login.rs b/src/commands/login.rs index 80425f9c..89a52186 100644 --- a/src/commands/login.rs +++ b/src/commands/login.rs @@ -25,9 +25,14 @@ pub struct LoginCommand { #[clap(long)] pub ignore_federation_hints: bool, - /// Auto accept federation hints. + /// Disable auto accept federation hints. #[clap(long)] - pub auto_accept_federation_hints: bool, + pub disable_auto_accept_federation_hints: bool, + + /// Automatically attempt package initialize if does not exist + /// or ask the user to confirm first. + #[clap(long)] + pub disable_auto_package_init: bool, /// The backend to use for keyring access #[clap(long, value_name = "KEYRING_BACKEND", value_parser = keyring_backend_parser, long_help = keyring_backend_help())] @@ -52,7 +57,8 @@ impl LoginCommand { .transpose()? .map(|u| u.to_string()); config.ignore_federation_hints = self.ignore_federation_hints; - config.auto_accept_federation_hints = self.auto_accept_federation_hints; + config.disable_auto_accept_federation_hints = self.disable_auto_accept_federation_hints; + config.disable_auto_package_init = self.disable_auto_package_init; // set keyring backend, if specified if self.keyring_backend.is_some() { diff --git a/tests/support/mod.rs b/tests/support/mod.rs index bab73be4..6f99c0d0 100644 --- a/tests/support/mod.rs +++ b/tests/support/mod.rs @@ -168,7 +168,8 @@ pub async fn spawn_server( keys: IndexSet::new(), keyring_auth: false, ignore_federation_hints: false, - auto_accept_federation_hints: false, + disable_auto_accept_federation_hints: false, + disable_auto_package_init: true, disable_interactive: true, keyring_backend: None, };