Skip to content

Commit c7f614c

Browse files
committed
refactor(source): Make fuzzy a param, like registry
1 parent 69badb5 commit c7f614c

File tree

7 files changed

+62
-116
lines changed

7 files changed

+62
-116
lines changed

src/cargo/core/registry.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -671,11 +671,7 @@ impl<'cfg> Registry for PackageRegistry<'cfg> {
671671
}
672672
f(lock(locked, all_patches, summary))
673673
};
674-
return if fuzzy {
675-
source.fuzzy_query(dep, callback)
676-
} else {
677-
source.query(dep, callback)
678-
};
674+
return source.query(dep, fuzzy, callback);
679675
}
680676

681677
// If we have an override summary then we query the source
@@ -694,11 +690,7 @@ impl<'cfg> Registry for PackageRegistry<'cfg> {
694690
n += 1;
695691
to_warn = Some(summary);
696692
};
697-
let pend = if fuzzy {
698-
source.fuzzy_query(dep, callback)?
699-
} else {
700-
source.query(dep, callback)?
701-
};
693+
let pend = source.query(dep, fuzzy, callback);
702694
if pend.is_pending() {
703695
return Poll::Pending;
704696
}

src/cargo/core/source/mod.rs

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,20 @@ pub trait Source {
2929
fn requires_precise(&self) -> bool;
3030

3131
/// Attempts to find the packages that match a dependency request.
32-
fn query(&mut self, dep: &Dependency, f: &mut dyn FnMut(Summary)) -> Poll<CargoResult<()>>;
33-
34-
/// Attempts to find the packages that are close to a dependency request.
35-
/// Each source gets to define what `close` means for it.
32+
///
33+
/// When fuzzy, each source gets to define what `close` means for it.
3634
/// Path/Git sources may return all dependencies that are at that URI,
3735
/// whereas an `Index` source may return dependencies that have the same canonicalization.
38-
fn fuzzy_query(
36+
fn query(
3937
&mut self,
4038
dep: &Dependency,
39+
fuzzy: bool,
4140
f: &mut dyn FnMut(Summary),
4241
) -> Poll<CargoResult<()>>;
4342

4443
fn query_vec(&mut self, dep: &Dependency) -> Poll<CargoResult<Vec<Summary>>> {
4544
let mut ret = Vec::new();
46-
self.query(dep, &mut |s| ret.push(s)).map_ok(|_| ret)
45+
self.query(dep, false, &mut |s| ret.push(s)).map_ok(|_| ret)
4746
}
4847

4948
/// Ensure that the source is fully up-to-date for the current session on the next query.
@@ -142,17 +141,13 @@ impl<'a, T: Source + ?Sized + 'a> Source for Box<T> {
142141
}
143142

144143
/// Forwards to `Source::query`.
145-
fn query(&mut self, dep: &Dependency, f: &mut dyn FnMut(Summary)) -> Poll<CargoResult<()>> {
146-
(**self).query(dep, f)
147-
}
148-
149-
/// Forwards to `Source::query`.
150-
fn fuzzy_query(
144+
fn query(
151145
&mut self,
152146
dep: &Dependency,
147+
fuzzy: bool,
153148
f: &mut dyn FnMut(Summary),
154149
) -> Poll<CargoResult<()>> {
155-
(**self).fuzzy_query(dep, f)
150+
(**self).query(dep, fuzzy, f)
156151
}
157152

158153
fn invalidate_cache(&mut self) {
@@ -216,16 +211,13 @@ impl<'a, T: Source + ?Sized + 'a> Source for &'a mut T {
216211
(**self).requires_precise()
217212
}
218213

219-
fn query(&mut self, dep: &Dependency, f: &mut dyn FnMut(Summary)) -> Poll<CargoResult<()>> {
220-
(**self).query(dep, f)
221-
}
222-
223-
fn fuzzy_query(
214+
fn query(
224215
&mut self,
225216
dep: &Dependency,
217+
fuzzy: bool,
226218
f: &mut dyn FnMut(Summary),
227219
) -> Poll<CargoResult<()>> {
228-
(**self).fuzzy_query(dep, f)
220+
(**self).query(dep, fuzzy, f)
229221
}
230222

231223
fn invalidate_cache(&mut self) {

src/cargo/sources/directory.rs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,28 +46,18 @@ impl<'cfg> Debug for DirectorySource<'cfg> {
4646
}
4747

4848
impl<'cfg> Source for DirectorySource<'cfg> {
49-
fn query(&mut self, dep: &Dependency, f: &mut dyn FnMut(Summary)) -> Poll<CargoResult<()>> {
50-
if !self.updated {
51-
return Poll::Pending;
52-
}
53-
let packages = self.packages.values().map(|p| &p.0);
54-
let matches = packages.filter(|pkg| dep.matches(pkg.summary()));
55-
for summary in matches.map(|pkg| pkg.summary().clone()) {
56-
f(summary);
57-
}
58-
Poll::Ready(Ok(()))
59-
}
60-
61-
fn fuzzy_query(
49+
fn query(
6250
&mut self,
63-
_dep: &Dependency,
51+
dep: &Dependency,
52+
fuzzy: bool,
6453
f: &mut dyn FnMut(Summary),
6554
) -> Poll<CargoResult<()>> {
6655
if !self.updated {
6756
return Poll::Pending;
6857
}
6958
let packages = self.packages.values().map(|p| &p.0);
70-
for summary in packages.map(|pkg| pkg.summary().clone()) {
59+
let matches = packages.filter(|pkg| fuzzy || dep.matches(pkg.summary()));
60+
for summary in matches.map(|pkg| pkg.summary().clone()) {
7161
f(summary);
7262
}
7363
Poll::Ready(Ok(()))

src/cargo/sources/git/source.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,21 +86,14 @@ impl<'cfg> Debug for GitSource<'cfg> {
8686
}
8787

8888
impl<'cfg> Source for GitSource<'cfg> {
89-
fn query(&mut self, dep: &Dependency, f: &mut dyn FnMut(Summary)) -> Poll<CargoResult<()>> {
90-
if let Some(src) = self.path_source.as_mut() {
91-
src.query(dep, f)
92-
} else {
93-
Poll::Pending
94-
}
95-
}
96-
97-
fn fuzzy_query(
89+
fn query(
9890
&mut self,
9991
dep: &Dependency,
92+
fuzzy: bool,
10093
f: &mut dyn FnMut(Summary),
10194
) -> Poll<CargoResult<()>> {
10295
if let Some(src) = self.path_source.as_mut() {
103-
src.fuzzy_query(dep, f)
96+
src.query(dep, fuzzy, f)
10497
} else {
10598
Poll::Pending
10699
}

src/cargo/sources/path.rs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -497,24 +497,17 @@ impl<'cfg> Debug for PathSource<'cfg> {
497497
}
498498

499499
impl<'cfg> Source for PathSource<'cfg> {
500-
fn query(&mut self, dep: &Dependency, f: &mut dyn FnMut(Summary)) -> Poll<CargoResult<()>> {
501-
self.update()?;
502-
for s in self.packages.iter().map(|p| p.summary()) {
503-
if dep.matches(s) {
504-
f(s.clone())
505-
}
506-
}
507-
Poll::Ready(Ok(()))
508-
}
509-
510-
fn fuzzy_query(
500+
fn query(
511501
&mut self,
512-
_dep: &Dependency,
502+
dep: &Dependency,
503+
fuzzy: bool,
513504
f: &mut dyn FnMut(Summary),
514505
) -> Poll<CargoResult<()>> {
515506
self.update()?;
516507
for s in self.packages.iter().map(|p| p.summary()) {
517-
f(s.clone())
508+
if fuzzy || dep.matches(s) {
509+
f(s.clone())
510+
}
518511
}
519512
Poll::Ready(Ok(()))
520513
}

src/cargo/sources/registry/mod.rs

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -701,51 +701,52 @@ impl<'cfg> RegistrySource<'cfg> {
701701
}
702702

703703
impl<'cfg> Source for RegistrySource<'cfg> {
704-
fn query(&mut self, dep: &Dependency, f: &mut dyn FnMut(Summary)) -> Poll<CargoResult<()>> {
705-
// If this is a precise dependency, then it came from a lock file and in
706-
// theory the registry is known to contain this version. If, however, we
707-
// come back with no summaries, then our registry may need to be
708-
// updated, so we fall back to performing a lazy update.
709-
if dep.source_id().precise().is_some() && !self.ops.is_updated() {
710-
debug!("attempting query without update");
711-
let mut called = false;
712-
let pend =
713-
self.index
714-
.query_inner(dep, &mut *self.ops, &self.yanked_whitelist, &mut |s| {
704+
fn query(
705+
&mut self,
706+
dep: &Dependency,
707+
fuzzy: bool,
708+
f: &mut dyn FnMut(Summary),
709+
) -> Poll<CargoResult<()>> {
710+
if !fuzzy {
711+
// If this is a precise dependency, then it came from a lock file and in
712+
// theory the registry is known to contain this version. If, however, we
713+
// come back with no summaries, then our registry may need to be
714+
// updated, so we fall back to performing a lazy update.
715+
if dep.source_id().precise().is_some() && !self.ops.is_updated() {
716+
debug!("attempting query without update");
717+
let mut called = false;
718+
let pend = self.index.query_inner(
719+
dep,
720+
&mut *self.ops,
721+
&self.yanked_whitelist,
722+
&mut |s| {
715723
if dep.matches(&s) {
716724
called = true;
717725
f(s);
718726
}
719-
})?;
720-
if pend.is_pending() {
721-
return Poll::Pending;
722-
}
723-
if called {
724-
return Poll::Ready(Ok(()));
725-
} else {
726-
debug!("falling back to an update");
727-
self.invalidate_cache();
728-
return Poll::Pending;
727+
},
728+
)?;
729+
if pend.is_pending() {
730+
return Poll::Pending;
731+
}
732+
if called {
733+
return Poll::Ready(Ok(()));
734+
} else {
735+
debug!("falling back to an update");
736+
self.invalidate_cache();
737+
return Poll::Pending;
738+
}
729739
}
730740
}
731741

732742
self.index
733743
.query_inner(dep, &mut *self.ops, &self.yanked_whitelist, &mut |s| {
734-
if dep.matches(&s) {
744+
if fuzzy || dep.matches(&s) {
735745
f(s);
736746
}
737747
})
738748
}
739749

740-
fn fuzzy_query(
741-
&mut self,
742-
dep: &Dependency,
743-
f: &mut dyn FnMut(Summary),
744-
) -> Poll<CargoResult<()>> {
745-
self.index
746-
.query_inner(dep, &mut *self.ops, &self.yanked_whitelist, f)
747-
}
748-
749750
fn supports_checksums(&self) -> bool {
750751
true
751752
}

src/cargo/sources/replaced.rs

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,32 +42,17 @@ impl<'cfg> Source for ReplacedSource<'cfg> {
4242
self.inner.requires_precise()
4343
}
4444

45-
fn query(&mut self, dep: &Dependency, f: &mut dyn FnMut(Summary)) -> Poll<CargoResult<()>> {
46-
let (replace_with, to_replace) = (self.replace_with, self.to_replace);
47-
let dep = dep.clone().map_source(to_replace, replace_with);
48-
49-
self.inner
50-
.query(&dep, &mut |summary| {
51-
f(summary.map_source(replace_with, to_replace))
52-
})
53-
.map_err(|e| {
54-
e.context(format!(
55-
"failed to query replaced source {}",
56-
self.to_replace
57-
))
58-
})
59-
}
60-
61-
fn fuzzy_query(
45+
fn query(
6246
&mut self,
6347
dep: &Dependency,
48+
fuzzy: bool,
6449
f: &mut dyn FnMut(Summary),
6550
) -> Poll<CargoResult<()>> {
6651
let (replace_with, to_replace) = (self.replace_with, self.to_replace);
6752
let dep = dep.clone().map_source(to_replace, replace_with);
6853

6954
self.inner
70-
.fuzzy_query(&dep, &mut |summary| {
55+
.query(&dep, fuzzy, &mut |summary| {
7156
f(summary.map_source(replace_with, to_replace))
7257
})
7358
.map_err(|e| {

0 commit comments

Comments
 (0)