Don't accumulate feature and rustdoc flags twice (fixes #4790)
authorAnthony Ramine <n.oxyde@gmail.com>
Thu, 7 Dec 2017 14:13:46 +0000 (15:13 +0100)
committerAnthony Ramine <n.oxyde@gmail.com>
Fri, 8 Dec 2017 16:44:26 +0000 (17:44 +0100)
src/cargo/ops/cargo_rustc/mod.rs
tests/rustdocflags.rs

index bc0c812ca208f995f7b8878b15c7959e43b1397e..23998877b8419a05a38fd4b1cea7e8cffcdcf44b 100644 (file)
@@ -226,14 +226,15 @@ pub fn compile_targets<'a, 'cfg: 'a>(ws: &Workspace<'cfg>,
         }
 
         let feats = cx.resolve.features(unit.pkg.package_id());
-        cx.compilation.cfgs.entry(unit.pkg.package_id().clone())
-            .or_insert_with(HashSet::new)
-            .extend(feats.iter().map(|feat| format!("feature=\"{}\"", feat)));
+        if !feats.is_empty() {
+            cx.compilation.cfgs.entry(unit.pkg.package_id().clone()).or_insert_with(|| {
+                feats.iter().map(|feat| format!("feature=\"{}\"", feat)).collect()
+            });
+        }
         let rustdocflags = cx.rustdocflags_args(&unit)?;
         if !rustdocflags.is_empty() {
             cx.compilation.rustdocflags.entry(unit.pkg.package_id().clone())
-                .or_insert_with(Vec::new)
-                .extend(rustdocflags);
+                .or_insert(rustdocflags);
         }
 
         output_depinfo(&mut cx, unit)?;
index e8bc2fad9dd61521f578eebb16287642e758e69c..19c4964263f8dbbb2f9ad5a1a857791fe7d30579 100644 (file)
@@ -105,3 +105,18 @@ fn rustdocflags_passed_to_rustdoc_through_cargo_test() {
     assert_that(p.cargo("test").arg("--doc").env("RUSTDOCFLAGS", "--cfg do_not_choke"),
                 execs().with_status(0));
 }
+
+#[test]
+fn rustdocflags_passed_to_rustdoc_through_cargo_test_only_once() {
+    let p = project("foo")
+        .file("Cargo.toml", r#"
+            [package]
+            name = "foo"
+            version = "0.0.1"
+        "#)
+        .file("src/lib.rs", "")
+        .build();
+
+    assert_that(p.cargo("test").arg("--doc").env("RUSTDOCFLAGS", "--markdown-no-toc"),
+                execs().with_status(0));
+}