From: Bryant Mairs Date: Thu, 26 Jan 2017 01:18:19 +0000 (-0800) Subject: Improve error for dependencies that don't have the same source path for all build... X-Git-Tag: archive/raspbian/0.35.0-2+rpi1~3^2^2^2^2^2^2^2~22^2~11^2~11^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f9064fd6c8f3be5f41c9fed6d007d248fda2d4d5;p=cargo.git Improve error for dependencies that don't have the same source path for all build targets. --- diff --git a/src/cargo/util/toml.rs b/src/cargo/util/toml.rs index 2a70feecb..704557f1a 100644 --- a/src/cargo/util/toml.rs +++ b/src/cargo/util/toml.rs @@ -636,8 +636,9 @@ impl TomlManifest { let name = dep.name(); let prev = names_sources.insert(name, dep.source_id()); if prev.is_some() && prev != Some(dep.source_id()) { - bail!("found duplicate dependency name {}, but all \ - dependencies must have a unique name", name); + bail!("Dependency '{}' has different source paths depending on the build \ + target. Each dependency must have a single canonical source path \ + irrespective of build target.", name); } } } diff --git a/tests/bad-config.rs b/tests/bad-config.rs index fd22ea3f6..63aae50df 100644 --- a/tests/bad-config.rs +++ b/tests/bad-config.rs @@ -553,7 +553,53 @@ fn duplicate_deps() { [ERROR] failed to parse manifest at `[..]` Caused by: - found duplicate dependency name bar, but all dependencies must have a unique name + Dependency 'bar' has different source paths depending on the build target. Each dependency must \ +have a single canonical source path irrespective of build target. +")); +} + +#[test] +fn duplicate_deps_diff_sources() { + let foo = project("foo") + .file("shim-bar/Cargo.toml", r#" + [package] + name = "bar" + version = "0.0.1" + authors = [] + "#) + .file("shim-bar/src/lib.rs", r#" + pub fn a() {} + "#) + .file("linux-bar/Cargo.toml", r#" + [package] + name = "bar" + version = "0.0.1" + authors = [] + "#) + .file("linux-bar/src/lib.rs", r#" + pub fn a() {} + "#) + .file("Cargo.toml", r#" + [package] + name = "qqq" + version = "0.0.1" + authors = [] + + [target.i686-unknown-linux-gnu.dependencies] + bar = { path = "shim-bar" } + + [target.x86_64-unknown-linux-gnu.dependencies] + bar = { path = "linux-bar" } + "#) + .file("src/main.rs", r#"fn main () {}"#); + + assert_that(foo.cargo_process("build"), + execs().with_status(101).with_stderr("\ +[ERROR] failed to parse manifest at `[..]` + +Caused by: + Dependency 'bar' has different source paths depending on the build target. Each dependency must \ +have a single canonical source path irrespective of build target. ")); }