Skip to content

Commit 2db5b45

Browse files
committed
Move extern_crate_name to Resolve
1 parent 97a988e commit 2db5b45

File tree

2 files changed

+30
-25
lines changed

2 files changed

+30
-25
lines changed

src/cargo/core/compiler/build_context/mod.rs

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -92,29 +92,7 @@ impl<'a, 'cfg> BuildContext<'a, 'cfg> {
9292
}
9393

9494
pub fn extern_crate_name(&self, unit: &Unit<'a>, dep: &Unit<'a>) -> CargoResult<String> {
95-
let deps = {
96-
let a = unit.pkg.package_id();
97-
let b = dep.pkg.package_id();
98-
if a == b {
99-
&[]
100-
} else {
101-
self.resolve.dependencies_listed(a, b)
102-
}
103-
};
104-
105-
let crate_name = dep.target.crate_name();
106-
let mut names = deps.iter()
107-
.map(|d| d.rename().map(|s| s.as_str()).unwrap_or(&crate_name));
108-
let name = names.next().unwrap_or(&crate_name);
109-
for n in names {
110-
if n == name {
111-
continue
112-
}
113-
bail!("multiple dependencies listed for the same crate must \
114-
all have the same name, but the dependency on `{}` \
115-
is listed as having different names", dep.pkg.package_id());
116-
}
117-
Ok(name.to_string())
95+
self.resolve.extern_crate_name(unit.pkg.package_id(), dep.pkg.package_id(), dep.target)
11896
}
11997

12098
/// Whether a dependency should be compiled for the host or target platform,

src/cargo/core/resolver/resolve.rs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::iter::FromIterator;
44

55
use url::Url;
66

7-
use core::{Dependency, PackageId, PackageIdSpec, Summary};
7+
use core::{Dependency, PackageId, PackageIdSpec, Summary, Target};
88
use util::Graph;
99
use util::errors::CargoResult;
1010
use util::graph::{Edges, Nodes};
@@ -213,7 +213,34 @@ unable to verify that `{0}` is the same as when the lockfile was generated
213213
&self.metadata
214214
}
215215

216-
pub fn dependencies_listed(&self, from: &PackageId, to: &PackageId) -> &[Dependency] {
216+
pub fn extern_crate_name(
217+
&self,
218+
from: &PackageId,
219+
to: &PackageId,
220+
to_target: &Target,
221+
) -> CargoResult<String> {
222+
let deps = if from == to {
223+
&[]
224+
} else {
225+
self.dependencies_listed(from, to)
226+
};
227+
228+
let crate_name = to_target.crate_name();
229+
let mut names = deps.iter()
230+
.map(|d| d.rename().map(|s| s.as_str()).unwrap_or(&crate_name));
231+
let name = names.next().unwrap_or(&crate_name);
232+
for n in names {
233+
if n == name {
234+
continue
235+
}
236+
bail!("multiple dependencies listed for the same crate must \
237+
all have the same name, but the dependency on `{}` \
238+
is listed as having different names", to);
239+
}
240+
Ok(name.to_string())
241+
}
242+
243+
fn dependencies_listed(&self, from: &PackageId, to: &PackageId) -> &[Dependency] {
217244
// We've got a dependency on `from` to `to`, but this dependency edge
218245
// may be affected by [replace]. If the `to` package is listed as the
219246
// target of a replacement (aka the key of a reverse replacement map)

0 commit comments

Comments
 (0)