diff --git a/src/cargo/sources/registry/index.rs b/src/cargo/sources/registry/index.rs index 987d66cb1eb7..51f343f0682e 100644 --- a/src/cargo/sources/registry/index.rs +++ b/src/cargo/sources/registry/index.rs @@ -98,7 +98,7 @@ use semver::Version; use serde::Deserialize; use std::borrow::Cow; use std::collections::BTreeMap; -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; use std::fs; use std::io::ErrorKind; use std::path::Path; @@ -574,8 +574,7 @@ impl<'cfg> RegistryIndex<'cfg> { name: InternedString, req: &OptVersionReq, load: &mut dyn RegistryData, - yanked_whitelist: &HashSet, - f: &mut dyn FnMut(Summary), + f: &mut dyn FnMut(IndexSummary), ) -> Poll> { if self.config.offline() { // This should only return `Poll::Ready(Ok(()))` if there is at least 1 match. @@ -592,17 +591,10 @@ impl<'cfg> RegistryIndex<'cfg> { let callback = &mut |s: IndexSummary| { if !s.is_offline() { called = true; - f(s.into_summary()); + f(s); } }; - ready!(self.query_inner_with_online( - name, - req, - load, - yanked_whitelist, - callback, - false - )?); + ready!(self.query_inner_with_online(name, req, load, callback, false)?); if called { return Poll::Ready(Ok(())); } @@ -611,9 +603,8 @@ impl<'cfg> RegistryIndex<'cfg> { name, req, load, - yanked_whitelist, &mut |s| { - f(s.into_summary()); + f(s); }, true, ) @@ -628,7 +619,6 @@ impl<'cfg> RegistryIndex<'cfg> { name: InternedString, req: &OptVersionReq, load: &mut dyn RegistryData, - yanked_whitelist: &HashSet, f: &mut dyn FnMut(IndexSummary), online: bool, ) -> Poll> { @@ -650,10 +640,6 @@ impl<'cfg> RegistryIndex<'cfg> { IndexSummary::Offline(s.as_summary().clone()) } }) - // Next filter out all yanked packages. Some yanked packages may - // leak through if they're in a whitelist (aka if they were - // previously in `Cargo.lock` - .filter(|s| !s.is_yanked() || yanked_whitelist.contains(&s.package_id())) .for_each(f); Poll::Ready(Ok(())) } diff --git a/src/cargo/sources/registry/mod.rs b/src/cargo/sources/registry/mod.rs index df6250dd83dc..d8579abc23eb 100644 --- a/src/cargo/sources/registry/mod.rs +++ b/src/cargo/sources/registry/mod.rs @@ -727,18 +727,15 @@ impl<'cfg> Source for RegistrySource<'cfg> { if kind == QueryKind::Exact && req.is_locked() && !self.ops.is_updated() { debug!("attempting query without update"); let mut called = false; - ready!(self.index.query_inner( - dep.package_name(), - &req, - &mut *self.ops, - &self.yanked_whitelist, - &mut |s| { - if dep.matches(&s) { + ready!(self + .index + .query_inner(dep.package_name(), &req, &mut *self.ops, &mut |s| { + if dep.matches(s.as_summary()) { + // We are looking for a package from a lock file so we do not care about yank called = true; - f(s); + f(s.into_summary()); } - }, - ))?; + },))?; if called { Poll::Ready(Ok(())) } else { @@ -748,18 +745,19 @@ impl<'cfg> Source for RegistrySource<'cfg> { } } else { let mut called = false; - ready!(self.index.query_inner( - dep.package_name(), - &req, - &mut *self.ops, - &self.yanked_whitelist, - &mut |s| { - if dep.matches(&s) || kind == QueryKind::Fuzzy { - f(s); + ready!(self + .index + .query_inner(dep.package_name(), &req, &mut *self.ops, &mut |s| { + // Next filter out all yanked packages. Some yanked packages may + // leak through if they're in a whitelist (aka if they were + // previously in `Cargo.lock` + if (dep.matches(s.as_summary()) || kind == QueryKind::Fuzzy) + && (!s.is_yanked() || self.yanked_whitelist.contains(&s.package_id())) + { + f(s.into_summary()); called = true; } - } - ))?; + }))?; if called { return Poll::Ready(Ok(())); } @@ -781,13 +779,9 @@ impl<'cfg> Source for RegistrySource<'cfg> { } any_pending |= self .index - .query_inner( - name_permutation, - &req, - &mut *self.ops, - &self.yanked_whitelist, - f, - )? + .query_inner(name_permutation, &req, &mut *self.ops, &mut |s| { + f(s.into_summary()); + })? .is_pending(); } }