Skip to content

Commit 1ca44da

Browse files
committed
Auto merge of #5476 - dwijnand:Registry-vs-Source-confusion, r=matklad
Try & simplify Registry vs Source confusion Refs #3006. I tried to go further and replace references of `Registry` with `PackageRegistry`, but I ran into lifetime issue in `ops::resolve_with_previous` which I think has to do with no longer passing `PackageRegistry` as a `Registry` trait object (with a new and distinct lifetime).
2 parents 0dd5384 + 05e8194 commit 1ca44da

File tree

8 files changed

+44
-136
lines changed

8 files changed

+44
-136
lines changed

src/cargo/core/registry.rs

Lines changed: 0 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,6 @@ pub trait Registry {
2121
self.query(dep, &mut |s| ret.push(s))?;
2222
Ok(ret)
2323
}
24-
25-
/// Returns whether or not this registry will return summaries with
26-
/// checksums listed.
27-
fn supports_checksums(&self) -> bool;
28-
29-
/// Returns whether or not this registry will return summaries with
30-
/// the `precise` field in the source id listed.
31-
fn requires_precise(&self) -> bool;
32-
}
33-
34-
impl<'a, T: ?Sized + Registry + 'a> Registry for Box<T> {
35-
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()> {
36-
(**self).query(dep, f)
37-
}
38-
39-
fn supports_checksums(&self) -> bool {
40-
(**self).supports_checksums()
41-
}
42-
43-
fn requires_precise(&self) -> bool {
44-
(**self).requires_precise()
45-
}
4624
}
4725

4826
/// This structure represents a registry of known packages. It internally
@@ -535,14 +513,6 @@ impl<'cfg> Registry for PackageRegistry<'cfg> {
535513
f(self.lock(override_summary));
536514
Ok(())
537515
}
538-
539-
fn supports_checksums(&self) -> bool {
540-
false
541-
}
542-
543-
fn requires_precise(&self) -> bool {
544-
false
545-
}
546516
}
547517

548518
fn lock(locked: &LockedMap, patches: &HashMap<Url, Vec<PackageId>>, summary: Summary) -> Summary {
@@ -635,81 +605,3 @@ fn lock(locked: &LockedMap, patches: &HashMap<Url, Vec<PackageId>>, summary: Sum
635605
dep
636606
})
637607
}
638-
639-
#[cfg(test)]
640-
pub mod test {
641-
use core::{Dependency, Registry, Summary};
642-
use util::CargoResult;
643-
644-
pub struct RegistryBuilder {
645-
summaries: Vec<Summary>,
646-
overrides: Vec<Summary>,
647-
}
648-
649-
impl RegistryBuilder {
650-
pub fn new() -> RegistryBuilder {
651-
RegistryBuilder {
652-
summaries: vec![],
653-
overrides: vec![],
654-
}
655-
}
656-
657-
pub fn summary(mut self, summary: Summary) -> RegistryBuilder {
658-
self.summaries.push(summary);
659-
self
660-
}
661-
662-
pub fn summaries(mut self, summaries: Vec<Summary>) -> RegistryBuilder {
663-
self.summaries.extend(summaries.into_iter());
664-
self
665-
}
666-
667-
pub fn add_override(mut self, summary: Summary) -> RegistryBuilder {
668-
self.overrides.push(summary);
669-
self
670-
}
671-
672-
pub fn overrides(mut self, summaries: Vec<Summary>) -> RegistryBuilder {
673-
self.overrides.extend(summaries.into_iter());
674-
self
675-
}
676-
677-
fn query_overrides(&self, dep: &Dependency) -> Vec<Summary> {
678-
self.overrides
679-
.iter()
680-
.filter(|s| s.name() == dep.name())
681-
.map(|s| s.clone())
682-
.collect()
683-
}
684-
}
685-
686-
impl Registry for RegistryBuilder {
687-
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()> {
688-
debug!("querying; dep={:?}", dep);
689-
690-
let overrides = self.query_overrides(dep);
691-
692-
if overrides.is_empty() {
693-
for s in self.summaries.iter() {
694-
if dep.matches(s) {
695-
f(s.clone());
696-
}
697-
}
698-
Ok(())
699-
} else {
700-
for s in overrides {
701-
f(s);
702-
}
703-
Ok(())
704-
}
705-
}
706-
707-
fn supports_checksums(&self) -> bool {
708-
false
709-
}
710-
711-
fn requires_precise(&self) -> bool {
712-
false
713-
}
714-
}
715-
}

src/cargo/core/source/mod.rs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::collections::hash_map::{HashMap, IterMut, Values};
22
use std::fmt;
33

4-
use core::{Package, PackageId, Registry};
4+
use core::{Dependency, Package, PackageId, Summary};
55
use util::CargoResult;
66

77
mod source_id;
@@ -10,10 +10,27 @@ pub use self::source_id::{GitReference, SourceId};
1010

1111
/// A Source finds and downloads remote packages based on names and
1212
/// versions.
13-
pub trait Source: Registry {
13+
pub trait Source {
1414
/// Returns the `SourceId` corresponding to this source
1515
fn source_id(&self) -> &SourceId;
1616

17+
/// Returns whether or not this source will return summaries with
18+
/// checksums listed.
19+
fn supports_checksums(&self) -> bool;
20+
21+
/// Returns whether or not this source will return summaries with
22+
/// the `precise` field in the source id listed.
23+
fn requires_precise(&self) -> bool;
24+
25+
/// Attempt to find the packages that match a dependency request.
26+
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()>;
27+
28+
fn query_vec(&mut self, dep: &Dependency) -> CargoResult<Vec<Summary>> {
29+
let mut ret = Vec::new();
30+
self.query(dep, &mut |s| ret.push(s))?;
31+
Ok(ret)
32+
}
33+
1734
/// The update method performs any network operations required to
1835
/// get the entire list of all names, versions and dependencies of
1936
/// packages managed by the Source.
@@ -47,6 +64,21 @@ pub trait Source: Registry {
4764
}
4865

4966
impl<'a, T: Source + ?Sized + 'a> Source for Box<T> {
67+
/// Forwards to `Source::supports_checksums`
68+
fn supports_checksums(&self) -> bool {
69+
(**self).supports_checksums()
70+
}
71+
72+
/// Forwards to `Source::requires_precise`
73+
fn requires_precise(&self) -> bool {
74+
(**self).requires_precise()
75+
}
76+
77+
/// Forwards to `Source::query`
78+
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()> {
79+
(**self).query(dep, f)
80+
}
81+
5082
/// Forwards to `Source::source_id`
5183
fn source_id(&self) -> &SourceId {
5284
(**self).source_id()

src/cargo/sources/directory.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use hex;
88

99
use serde_json;
1010

11-
use core::{Dependency, Package, PackageId, Registry, Source, SourceId, Summary};
11+
use core::{Dependency, Package, PackageId, Source, SourceId, Summary};
1212
use sources::PathSource;
1313
use util::{Config, Sha256};
1414
use util::errors::{CargoResult, CargoResultExt};
@@ -44,7 +44,7 @@ impl<'cfg> Debug for DirectorySource<'cfg> {
4444
}
4545
}
4646

47-
impl<'cfg> Registry for DirectorySource<'cfg> {
47+
impl<'cfg> Source for DirectorySource<'cfg> {
4848
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()> {
4949
let packages = self.packages.values().map(|p| &p.0);
5050
let matches = packages.filter(|pkg| dep.matches(pkg.summary()));
@@ -61,9 +61,7 @@ impl<'cfg> Registry for DirectorySource<'cfg> {
6161
fn requires_precise(&self) -> bool {
6262
true
6363
}
64-
}
6564

66-
impl<'cfg> Source for DirectorySource<'cfg> {
6765
fn source_id(&self) -> &SourceId {
6866
&self.source_id
6967
}

src/cargo/sources/git/source.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use url::Url;
44

55
use core::source::{Source, SourceId};
66
use core::GitReference;
7-
use core::{Dependency, Package, PackageId, Registry, Summary};
7+
use core::{Dependency, Package, PackageId, Summary};
88
use util::Config;
99
use util::errors::CargoResult;
1010
use util::hex::short_hash;
@@ -124,7 +124,7 @@ impl<'cfg> Debug for GitSource<'cfg> {
124124
}
125125
}
126126

127-
impl<'cfg> Registry for GitSource<'cfg> {
127+
impl<'cfg> Source for GitSource<'cfg> {
128128
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()> {
129129
let src = self.path_source
130130
.as_mut()
@@ -139,9 +139,7 @@ impl<'cfg> Registry for GitSource<'cfg> {
139139
fn requires_precise(&self) -> bool {
140140
true
141141
}
142-
}
143142

144-
impl<'cfg> Source for GitSource<'cfg> {
145143
fn source_id(&self) -> &SourceId {
146144
&self.source_id
147145
}

src/cargo/sources/path.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use glob::Pattern;
88
use ignore::Match;
99
use ignore::gitignore::GitignoreBuilder;
1010

11-
use core::{Dependency, Package, PackageId, Registry, Source, SourceId, Summary};
11+
use core::{Dependency, Package, PackageId, Source, SourceId, Summary};
1212
use ops;
1313
use util::{self, internal, CargoResult};
1414
use util::paths;
@@ -475,7 +475,7 @@ impl<'cfg> Debug for PathSource<'cfg> {
475475
}
476476
}
477477

478-
impl<'cfg> Registry for PathSource<'cfg> {
478+
impl<'cfg> Source for PathSource<'cfg> {
479479
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()> {
480480
for s in self.packages.iter().map(|p| p.summary()) {
481481
if dep.matches(s) {
@@ -492,9 +492,7 @@ impl<'cfg> Registry for PathSource<'cfg> {
492492
fn requires_precise(&self) -> bool {
493493
false
494494
}
495-
}
496495

497-
impl<'cfg> Source for PathSource<'cfg> {
498496
fn source_id(&self) -> &SourceId {
499497
&self.source_id
500498
}

src/cargo/sources/registry/mod.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ use flate2::read::GzDecoder;
167167
use semver::Version;
168168
use tar::Archive;
169169

170-
use core::{Package, PackageId, Registry, Source, SourceId, Summary};
170+
use core::{Package, PackageId, Source, SourceId, Summary};
171171
use core::dependency::{Dependency, Kind};
172172
use sources::PathSource;
173173
use util::{internal, CargoResult, Config, FileLock, Filesystem};
@@ -420,7 +420,7 @@ impl<'cfg> RegistrySource<'cfg> {
420420
}
421421
}
422422

423-
impl<'cfg> Registry for RegistrySource<'cfg> {
423+
impl<'cfg> Source for RegistrySource<'cfg> {
424424
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()> {
425425
// If this is a precise dependency, then it came from a lockfile and in
426426
// theory the registry is known to contain this version. If, however, we
@@ -449,9 +449,7 @@ impl<'cfg> Registry for RegistrySource<'cfg> {
449449
fn requires_precise(&self) -> bool {
450450
false
451451
}
452-
}
453452

454-
impl<'cfg> Source for RegistrySource<'cfg> {
455453
fn source_id(&self) -> &SourceId {
456454
&self.source_id
457455
}

src/cargo/sources/replaced.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use core::{Dependency, Package, PackageId, Registry, Source, SourceId, Summary};
1+
use core::{Dependency, Package, PackageId, Source, SourceId, Summary};
22
use util::errors::{CargoResult, CargoResultExt};
33

44
pub struct ReplacedSource<'cfg> {
@@ -21,7 +21,7 @@ impl<'cfg> ReplacedSource<'cfg> {
2121
}
2222
}
2323

24-
impl<'cfg> Registry for ReplacedSource<'cfg> {
24+
impl<'cfg> Source for ReplacedSource<'cfg> {
2525
fn query(&mut self, dep: &Dependency, f: &mut FnMut(Summary)) -> CargoResult<()> {
2626
let (replace_with, to_replace) = (&self.replace_with, &self.to_replace);
2727
let dep = dep.clone().map_source(to_replace, replace_with);
@@ -42,9 +42,7 @@ impl<'cfg> Registry for ReplacedSource<'cfg> {
4242
fn requires_precise(&self) -> bool {
4343
self.inner.requires_precise()
4444
}
45-
}
4645

47-
impl<'cfg> Source for ReplacedSource<'cfg> {
4846
fn source_id(&self) -> &SourceId {
4947
&self.to_replace
5048
}

tests/testsuite/resolve.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,6 @@ fn resolve_with_config(
3636
}
3737
Ok(())
3838
}
39-
fn supports_checksums(&self) -> bool {
40-
false
41-
}
42-
fn requires_precise(&self) -> bool {
43-
false
44-
}
4539
}
4640
let mut registry = MyRegistry(registry);
4741
let summary = Summary::new(pkg.clone(), deps, BTreeMap::new(), None, false).unwrap();

0 commit comments

Comments
 (0)