Dependency.name to InternedString
authorEh2406 <YeomanYaacov@gmail.com>
Fri, 9 Mar 2018 15:07:59 +0000 (10:07 -0500)
committerEh2406 <YeomanYaacov@gmail.com>
Fri, 9 Mar 2018 15:07:59 +0000 (10:07 -0500)
src/cargo/core/dependency.rs
src/cargo/core/registry.rs
src/cargo/core/resolver/mod.rs
src/cargo/core/summary.rs
src/cargo/ops/cargo_rustc/context.rs
src/cargo/sources/registry/index.rs

index e80113d10ab6c93fc19665056737a1ebbe5a7003..a85c83adb47df3c8807fcdeb6e0d181041743f3b 100644 (file)
@@ -7,6 +7,7 @@ use semver::ReqParseError;
 use serde::ser;
 
 use core::{SourceId, Summary, PackageId};
+use core::interning::InternedString;
 use util::{Cfg, CfgExpr, Config};
 use util::errors::{CargoResult, CargoResultExt, CargoError};
 
@@ -20,7 +21,7 @@ pub struct Dependency {
 /// The data underlying a Dependency.
 #[derive(PartialEq, Eq, Hash, Ord, PartialOrd, Clone, Debug)]
 struct Inner {
-    name: String,
+    name: InternedString,
     source_id: SourceId,
     registry_id: Option<SourceId>,
     req: VersionReq,
@@ -63,7 +64,7 @@ impl ser::Serialize for Dependency {
         where S: ser::Serializer,
     {
         SerializedDependency {
-            name: self.name(),
+            name: &*self.name(),
             source: self.source_id(),
             req: self.version_req().to_string(),
             kind: self.kind(),
@@ -174,7 +175,7 @@ impl Dependency {
     pub fn new_override(name: &str, source_id: &SourceId) -> Dependency {
         Dependency {
             inner: Rc::new(Inner {
-                name: name.to_string(),
+                name: InternedString::new(name),
                 source_id: source_id.clone(),
                 registry_id: None,
                 req: VersionReq::any(),
@@ -194,8 +195,8 @@ impl Dependency {
         &self.inner.req
     }
 
-    pub fn name(&self) -> &str {
-        &self.inner.name
+    pub fn name(&self) -> InternedString {
+        self.inner.name
     }
 
     pub fn source_id(&self) -> &SourceId {
@@ -329,13 +330,13 @@ impl Dependency {
 
     /// Returns true if the package (`sum`) can fulfill this dependency request.
     pub fn matches_ignoring_source(&self, sum: &Summary) -> bool {
-        self.name() == &*sum.package_id().name() &&
+        self.name() == sum.package_id().name() &&
             self.version_req().matches(sum.package_id().version())
     }
 
     /// Returns true if the package (`id`) can fulfill this dependency request.
     pub fn matches_id(&self, id: &PackageId) -> bool {
-        self.inner.name == &*id.name() &&
+        self.inner.name == id.name() &&
             (self.inner.only_match_name || (self.inner.req.matches(id.version()) &&
                                       &self.inner.source_id == id.source_id()))
     }
index f7ab320c9f2de4a0407eb4becfc1490a46fdf76c..211f90863d8927b8a62a03e0b2e7177f3d88eed6 100644 (file)
@@ -317,7 +317,7 @@ impl<'cfg> PackageRegistry<'cfg> {
                        -> CargoResult<Option<Summary>> {
         for s in self.overrides.iter() {
             let src = self.sources.get_mut(s).unwrap();
-            let dep = Dependency::new_override(dep.name(), s);
+            let dep = Dependency::new_override(&*dep.name(), s);
             let mut results = src.query_vec(&dep)?;
             if !results.is_empty() {
                 return Ok(Some(results.remove(0)))
@@ -568,7 +568,7 @@ fn lock(locked: &LockedMap,
         // all known locked packages to see if they match this dependency.
         // If anything does then we lock it to that and move on.
         let v = locked.get(dep.source_id()).and_then(|map| {
-            map.get(dep.name())
+            map.get(&*dep.name())
         }).and_then(|vec| {
             vec.iter().find(|&&(ref id, _)| dep.matches_id(id))
         });
@@ -584,7 +584,7 @@ fn lock(locked: &LockedMap,
         let v = patches.get(dep.source_id().url()).map(|vec| {
             let dep2 = dep.clone();
             let mut iter = vec.iter().filter(move |p| {
-                dep2.name() == &*p.name() &&
+                dep2.name() == p.name() &&
                     dep2.version_req().matches(p.version())
             });
             (iter.next(), iter)
index c1023566a1195ea7230584730dbcd09a189a36cb..2a055d64e300c0fcd5ee4c888a069ed78ddc022d 100644 (file)
@@ -1044,7 +1044,7 @@ fn activation_error(cx: &Context,
         for &(p, r) in links_errors.iter() {
             if let ConflictReason::Links(ref link) = *r {
                 msg.push_str("\n\nthe package `");
-                msg.push_str(dep.name());
+                msg.push_str(&*dep.name());
                 msg.push_str("` links to the native library `");
                 msg.push_str(link);
                 msg.push_str("`, but it conflicts with a previous package which links to `");
@@ -1061,11 +1061,11 @@ fn activation_error(cx: &Context,
                 msg.push_str("\n\nthe package `");
                 msg.push_str(&*p.name());
                 msg.push_str("` depends on `");
-                msg.push_str(dep.name());
+                msg.push_str(&*dep.name());
                 msg.push_str("`, with features: `");
                 msg.push_str(features);
                 msg.push_str("` but `");
-                msg.push_str(dep.name());
+                msg.push_str(&*dep.name());
                 msg.push_str("` does not have these features.\n");
             }
             // p == parent so the full path is redundant.
@@ -1082,7 +1082,7 @@ fn activation_error(cx: &Context,
         }
 
         msg.push_str("\n\nfailed to select a version for `");
-        msg.push_str(dep.name());
+        msg.push_str(&*dep.name());
         msg.push_str("` which could resolve this conflict");
 
         return format_err!("{}", msg)
@@ -1274,7 +1274,7 @@ fn build_requirements<'a, 'b: 'a>(s: &'a Summary, method: &'b Method)
                 reqs.require_feature(key)?;
             }
             for dep in s.dependencies().iter().filter(|d| d.is_optional()) {
-                reqs.require_dependency(dep.name());
+                reqs.require_dependency(dep.name().to_inner());
             }
         }
         Method::Required { features: requested_features, .. } =>  {
@@ -1365,7 +1365,7 @@ impl Context {
     }
 
     fn prev_active(&self, dep: &Dependency) -> &[Summary] {
-        self.activations.get(&(InternedString::new(dep.name()), dep.source_id().clone()))
+        self.activations.get(&(dep.name(), dep.source_id().clone()))
             .map(|v| &v[..])
             .unwrap_or(&[])
     }
@@ -1397,12 +1397,12 @@ impl Context {
         // Next, collect all actually enabled dependencies and their features.
         for dep in deps {
             // Skip optional dependencies, but not those enabled through a feature
-            if dep.is_optional() && !reqs.deps.contains_key(dep.name()) {
+            if dep.is_optional() && !reqs.deps.contains_key(&*dep.name()) {
                 continue
             }
             // So we want this dependency.  Move the features we want from `feature_deps`
             // to `ret`.
-            let base = reqs.deps.remove(dep.name()).unwrap_or((false, vec![]));
+            let base = reqs.deps.remove(&*dep.name()).unwrap_or((false, vec![]));
             if !dep.is_optional() && base.0 {
                 self.warnings.push(
                     format!("Package `{}` does not have feature `{}`. It has a required dependency \
index 973e6cfe4327e40f129354eb6012d679a51272e2..3fc2b1a6b1b723c92f85879914c4ba0ace013579 100644 (file)
@@ -32,7 +32,7 @@ impl Summary {
                features: BTreeMap<String, Vec<String>>,
                links: Option<String>) -> CargoResult<Summary> {
         for dep in dependencies.iter() {
-            if features.get(dep.name()).is_some() {
+            if features.get(&*dep.name()).is_some() {
                 bail!("Features and dependencies cannot have the \
                        same name: `{}`", dep.name())
             }
@@ -47,7 +47,7 @@ impl Summary {
                 let dep = parts.next().unwrap();
                 let is_reexport = parts.next().is_some();
                 if !is_reexport && features.get(dep).is_some() { continue }
-                match dependencies.iter().find(|d| d.name() == dep) {
+                match dependencies.iter().find(|d| &*d.name() == dep) {
                     Some(d) => {
                         if d.is_optional() || is_reexport { continue }
                         bail!("Feature `{}` depends on `{}` which is not an \
index 9944df7e2ea8d74da4ac6c1018915866daed8c80..9f7766e0ef809de314df729a1cc94d4304611e33 100644 (file)
@@ -782,7 +782,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
         let deps = self.resolve.deps(id);
         let mut ret = deps.filter(|dep| {
             unit.pkg.dependencies().iter().filter(|d| {
-                d.name() == &*dep.name() && d.version_req().matches(dep.version())
+                d.name() == dep.name() && d.version_req().matches(dep.version())
             }).any(|d| {
                 // If this target is a build command, then we only want build
                 // dependencies, otherwise we want everything *other than* build
@@ -806,7 +806,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
 
                 // If the dependency is optional, then we're only activating it
                 // if the corresponding feature was activated
-                if d.is_optional() && !self.resolve.features(id).contains(d.name()) {
+                if d.is_optional() && !self.resolve.features(id).contains(&*d.name()) {
                     return false;
                 }
 
@@ -915,7 +915,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
     fn doc_deps(&self, unit: &Unit<'a>) -> CargoResult<Vec<Unit<'a>>> {
         let deps = self.resolve.deps(unit.pkg.package_id()).filter(|dep| {
             unit.pkg.dependencies().iter().filter(|d| {
-                d.name() == &*dep.name()
+                d.name() == dep.name()
             }).any(|dep| {
                 match dep.kind() {
                     DepKind::Normal => self.dep_platform_activated(dep,
index 43306be14a60d342c70da7eb1fded1675e973db5..87a96471068851d1c9a8414f208a33fbc8d990d7 100644 (file)
@@ -169,7 +169,7 @@ impl<'cfg> RegistryIndex<'cfg> {
                  f: &mut FnMut(Summary))
                  -> CargoResult<()> {
         let source_id = self.source_id.clone();
-        let summaries = self.summaries(dep.name(), load)?;
+        let summaries = self.summaries(&*dep.name(), load)?;
         let summaries = summaries.iter().filter(|&&(_, yanked)| {
             dep.source_id().precise().is_some() || !yanked
         }).map(|s| s.0.clone());
@@ -180,7 +180,7 @@ impl<'cfg> RegistryIndex<'cfg> {
         // version requested (argument to `--precise`).
         let summaries = summaries.filter(|s| {
             match source_id.precise() {
-                Some(p) if p.starts_with(dep.name()) &&
+                Some(p) if p.starts_with(&*dep.name()) &&
                            p[dep.name().len()..].starts_with('=') => {
                     let vers = &p[dep.name().len() + 1..];
                     s.version().to_string() == vers