From 9b731821daa499f89e9b437daaabf3d1ac074d6d Mon Sep 17 00:00:00 2001 From: Eh2406 Date: Wed, 7 Mar 2018 23:20:17 -0500 Subject: [PATCH] intern links attribute --- src/cargo/core/interning.rs | 8 ++++++++ src/cargo/core/resolver/mod.rs | 8 ++++---- src/cargo/core/summary.rs | 9 +++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/cargo/core/interning.rs b/src/cargo/core/interning.rs index 9fea6503d..45dde5810 100644 --- a/src/cargo/core/interning.rs +++ b/src/cargo/core/interning.rs @@ -1,3 +1,4 @@ +use std::fmt; use std::sync::RwLock; use std::collections::HashSet; use std::slice; @@ -51,6 +52,13 @@ impl Deref for InternedString { } } +impl fmt::Debug for InternedString { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let str: &str = &*self; + write!(f, "InternedString {{ {} }}", str) + } +} + impl Ord for InternedString { fn cmp(&self, other: &InternedString) -> Ordering { let str: &str = &*self; diff --git a/src/cargo/core/resolver/mod.rs b/src/cargo/core/resolver/mod.rs index b6531ec22..6edc410c0 100644 --- a/src/cargo/core/resolver/mod.rs +++ b/src/cargo/core/resolver/mod.rs @@ -734,11 +734,11 @@ impl RemainingCandidates { use std::mem::replace; for (_, b) in self.remaining.by_ref() { if let Some(link) = b.summary.links() { - if let Some(a) = links.get(&InternedString::new(link)) { + if let Some(a) = links.get(&link) { if a != b.summary.package_id() { self.conflicting_prev_active .entry(a.clone()) - .or_insert_with(|| ConflictReason::Links(link.to_owned())); + .or_insert_with(|| ConflictReason::Links(link.to_string())); continue; } } @@ -1309,9 +1309,9 @@ impl Context { if !prev.iter().any(|c| c == summary) { self.resolve_graph.push(GraphNode::Add(id.clone())); if let Some(link) = summary.links() { - ensure!(self.links.insert(InternedString::new(link), id.clone()).is_none(), + ensure!(self.links.insert(link, id.clone()).is_none(), "Attempting to resolve a with more then one crate with the links={}. \n\ - This will not build as is. Consider rebuilding the .lock file.", link); + This will not build as is. Consider rebuilding the .lock file.", &*link); } let mut inner: Vec<_> = (**prev).clone(); inner.push(summary.clone()); diff --git a/src/cargo/core/summary.rs b/src/cargo/core/summary.rs index 3613ccb7e..4144fde98 100644 --- a/src/cargo/core/summary.rs +++ b/src/cargo/core/summary.rs @@ -4,6 +4,7 @@ use std::rc::Rc; use semver::Version; use core::{Dependency, PackageId, SourceId}; +use core::interning::InternedString; use util::CargoResult; @@ -22,7 +23,7 @@ struct Inner { dependencies: Vec, features: BTreeMap>, checksum: Option, - links: Option, + links: Option, } impl Summary { @@ -71,7 +72,7 @@ impl Summary { dependencies, features, checksum: None, - links, + links: links.map(|l| InternedString::new(&l)), }), }) } @@ -85,8 +86,8 @@ impl Summary { pub fn checksum(&self) -> Option<&str> { self.inner.checksum.as_ref().map(|s| &s[..]) } - pub fn links(&self) -> Option<&str> { - self.inner.links.as_ref().map(|s| &s[..]) + pub fn links(&self) -> Option { + self.inner.links } pub fn override_id(mut self, id: PackageId) -> Summary { -- 2.30.2