Skip to content

Commit

Permalink
intern links attribute
Browse files Browse the repository at this point in the history
  • Loading branch information
Eh2406 committed Mar 8, 2018
1 parent 6535475 commit 9b73182
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
8 changes: 8 additions & 0 deletions src/cargo/core/interning.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::fmt;
use std::sync::RwLock;
use std::collections::HashSet;
use std::slice;
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions src/cargo/core/resolver/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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());
Expand Down
9 changes: 5 additions & 4 deletions src/cargo/core/summary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use std::rc::Rc;

use semver::Version;
use core::{Dependency, PackageId, SourceId};
use core::interning::InternedString;

use util::CargoResult;

Expand All @@ -22,7 +23,7 @@ struct Inner {
dependencies: Vec<Dependency>,
features: BTreeMap<String, Vec<String>>,
checksum: Option<String>,
links: Option<String>,
links: Option<InternedString>,
}

impl Summary {
Expand Down Expand Up @@ -71,7 +72,7 @@ impl Summary {
dependencies,
features,
checksum: None,
links,
links: links.map(|l| InternedString::new(&l)),
}),
})
}
Expand All @@ -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<InternedString> {
self.inner.links
}

pub fn override_id(mut self, id: PackageId) -> Summary {
Expand Down

0 comments on commit 9b73182

Please sign in to comment.