From ef215c787e6b2e741e466eb8938fb4ba484ea1e0 Mon Sep 17 00:00:00 2001 From: Tor Hovland <55164+torhovland@users.noreply.github.com> Date: Thu, 1 Aug 2024 13:07:02 +0200 Subject: [PATCH] Fix duplicate updating messages when using alt registries by reusing the RegistrySource. --- src/cargo/ops/registry/login.rs | 2 +- src/cargo/ops/registry/mod.rs | 9 +++++---- src/cargo/ops/registry/owner.rs | 2 +- src/cargo/ops/registry/publish.rs | 7 +++---- src/cargo/ops/registry/search.rs | 2 +- src/cargo/ops/registry/yank.rs | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cargo/ops/registry/login.rs b/src/cargo/ops/registry/login.rs index a3b23d203982..0dd2fb605ab4 100644 --- a/src/cargo/ops/registry/login.rs +++ b/src/cargo/ops/registry/login.rs @@ -27,7 +27,7 @@ pub fn registry_login( let source_ids = get_source_id(gctx, reg_or_index)?; let login_url = match registry(gctx, token_from_cmdline.clone(), reg_or_index, false, None) { - Ok((registry, _)) => Some(format!("{}/me", registry.host())), + Ok((registry, _, _)) => Some(format!("{}/me", registry.host())), Err(e) if e.is::() => e .downcast::() .unwrap() diff --git a/src/cargo/ops/registry/mod.rs b/src/cargo/ops/registry/mod.rs index 48a2bab34c5d..f129f6679964 100644 --- a/src/cargo/ops/registry/mod.rs +++ b/src/cargo/ops/registry/mod.rs @@ -114,13 +114,13 @@ impl RegistryCredentialConfig { /// `registry`, or `index` are set, then uses `crates-io`. /// * `force_update`: If `true`, forces the index to be updated. /// * `token_required`: If `true`, the token will be set. -fn registry( - gctx: &GlobalContext, +fn registry<'gctx>( + gctx: &'gctx GlobalContext, token_from_cmdline: Option>, reg_or_index: Option<&RegistryOrIndex>, force_update: bool, token_required: Option>, -) -> CargoResult<(Registry, RegistrySourceIds)> { +) -> CargoResult<(Registry, RegistrySourceIds, RegistrySource<'gctx>)> { let source_ids = get_source_id(gctx, reg_or_index)?; let is_index = reg_or_index.map(|v| v.is_index()).unwrap_or_default(); @@ -131,9 +131,9 @@ fn registry( auth::cache_token_from_commandline(gctx, &source_ids.original, token); } + let mut src = RegistrySource::remote(source_ids.replacement, &HashSet::new(), gctx)?; let cfg = { let _lock = gctx.acquire_package_cache_lock(CacheLockMode::DownloadExclusive)?; - let mut src = RegistrySource::remote(source_ids.replacement, &HashSet::new(), gctx)?; // Only update the index if `force_update` is set. if force_update { src.invalidate_cache() @@ -168,6 +168,7 @@ fn registry( Ok(( Registry::new_handle(api_host, token, handle, cfg.auth_required), source_ids, + src, )) } diff --git a/src/cargo/ops/registry/owner.rs b/src/cargo/ops/registry/owner.rs index 106410311393..b4994006bdc5 100644 --- a/src/cargo/ops/registry/owner.rs +++ b/src/cargo/ops/registry/owner.rs @@ -36,7 +36,7 @@ pub fn modify_owners(gctx: &GlobalContext, opts: &OwnersOptions) -> CargoResult< let operation = Operation::Owners { name: &name }; - let (mut registry, _) = super::registry( + let (mut registry, _, _) = super::registry( gctx, opts.token.as_ref().map(Secret::as_deref), opts.reg_or_index.as_ref(), diff --git a/src/cargo/ops/registry/publish.rs b/src/cargo/ops/registry/publish.rs index 334ee935ee15..f60d4621dcf7 100644 --- a/src/cargo/ops/registry/publish.rs +++ b/src/cargo/ops/registry/publish.rs @@ -28,6 +28,7 @@ use crate::ops; use crate::ops::PackageOpts; use crate::ops::Packages; use crate::sources::source::QueryKind; +use crate::sources::source::Source; use crate::sources::SourceConfigMap; use crate::sources::CRATES_IO_REGISTRY; use crate::util::auth; @@ -127,7 +128,7 @@ pub fn publish(ws: &Workspace<'_>, opts: &PublishOpts<'_>) -> CargoResult<()> { } val => val, }; - let (mut registry, reg_ids) = super::registry( + let (mut registry, reg_ids, mut source) = super::registry( opts.gctx, opts.token.as_ref().map(Secret::as_deref), reg_or_index.as_ref(), @@ -138,9 +139,7 @@ pub fn publish(ws: &Workspace<'_>, opts: &PublishOpts<'_>) -> CargoResult<()> { // Bail before packaging and uploading if same version already exists in the registry - let mut source = SourceConfigMap::empty(opts.gctx)?.load(reg_ids.original, &HashSet::new())?; - - let query = Dependency::parse(pkg.name(), Some(&ver), reg_ids.original)?; + let query = Dependency::parse(pkg.name(), Some(&ver), reg_ids.replacement)?; let _lock = opts .gctx diff --git a/src/cargo/ops/registry/search.rs b/src/cargo/ops/registry/search.rs index 9d1d1d5b0dcc..216478073698 100644 --- a/src/cargo/ops/registry/search.rs +++ b/src/cargo/ops/registry/search.rs @@ -20,7 +20,7 @@ pub fn search( reg_or_index: Option, limit: u32, ) -> CargoResult<()> { - let (mut registry, source_ids) = + let (mut registry, source_ids, _) = super::registry(gctx, None, reg_or_index.as_ref(), false, None)?; let (crates, total_crates) = registry.search(query, limit).with_context(|| { format!( diff --git a/src/cargo/ops/registry/yank.rs b/src/cargo/ops/registry/yank.rs index c05e8e18703c..077467073b6b 100644 --- a/src/cargo/ops/registry/yank.rs +++ b/src/cargo/ops/registry/yank.rs @@ -47,7 +47,7 @@ pub fn yank( } }; - let (mut registry, _) = super::registry( + let (mut registry, _, _) = super::registry( gctx, token.as_ref().map(Secret::as_deref), reg_or_index.as_ref(),