]> git.proxmox.com Git - cargo.git/commitdiff
Put namespaced features behind a feature gate
authorDirkjan Ochtman <dirkjan@ochtman.nl>
Mon, 30 Apr 2018 08:42:52 +0000 (10:42 +0200)
committerDirkjan Ochtman <dirkjan@ochtman.nl>
Mon, 30 Apr 2018 15:33:36 +0000 (17:33 +0200)
src/cargo/core/features.rs
src/cargo/util/toml/mod.rs
tests/testsuite/features.rs

index b38c0950e9e23912093e90dca54bdf98e0177e64..0ab8dbe56764d40ca860d4c78d28cf9d707a60b3 100644 (file)
@@ -177,6 +177,9 @@ features! {
 
         // Overriding profiles for dependencies.
         [unstable] profile_overrides: bool,
+
+        // Separating the namespaces for features and dependencies
+        [unstable] namespaced_features: bool,
     }
 }
 
index 5ef05ad009b5b0ed53213ebc21527818d7adbcaa..f15d0e2fc5699da1630413fe7f3c9d50123aef29 100644 (file)
@@ -839,6 +839,9 @@ impl TomlManifest {
 
         let exclude = project.exclude.clone().unwrap_or_default();
         let include = project.include.clone().unwrap_or_default();
+        if project.namespaced_features.is_some() {
+            features.require(Feature::namespaced_features())?;
+        }
 
         let summary = Summary::new(
             pkgid,
index f65644b3dc4b525bae743eebe6d9aa470938de2d..d041241412924ec13b01d44e781b0f7db5bd5114 100644 (file)
@@ -1721,6 +1721,8 @@ fn namespaced_invalid_feature() {
         .file(
             "Cargo.toml",
             r#"
+            cargo-features = ["namespaced-features"]
+
             [project]
             name = "foo"
             version = "0.0.1"
@@ -1735,7 +1737,7 @@ fn namespaced_invalid_feature() {
         .build();
 
     assert_that(
-        p.cargo("build"),
+        p.cargo("build").masquerade_as_nightly_cargo(),
         execs().with_status(101).with_stderr(
             "\
 [ERROR] failed to parse manifest at `[..]`
@@ -1753,6 +1755,8 @@ fn namespaced_invalid_dependency() {
         .file(
             "Cargo.toml",
             r#"
+            cargo-features = ["namespaced-features"]
+
             [project]
             name = "foo"
             version = "0.0.1"
@@ -1767,7 +1771,7 @@ fn namespaced_invalid_dependency() {
         .build();
 
     assert_that(
-        p.cargo("build"),
+        p.cargo("build").masquerade_as_nightly_cargo(),
         execs().with_status(101).with_stderr(
             "\
 [ERROR] failed to parse manifest at `[..]`
@@ -1785,6 +1789,8 @@ fn namespaced_non_optional_dependency() {
         .file(
             "Cargo.toml",
             r#"
+            cargo-features = ["namespaced-features"]
+
             [project]
             name = "foo"
             version = "0.0.1"
@@ -1802,7 +1808,7 @@ fn namespaced_non_optional_dependency() {
         .build();
 
     assert_that(
-        p.cargo("build"),
+        p.cargo("build").masquerade_as_nightly_cargo(),
         execs().with_status(101).with_stderr(
             "\
 [ERROR] failed to parse manifest at `[..]`
@@ -1821,6 +1827,8 @@ fn namespaced_implicit_feature() {
         .file(
             "Cargo.toml",
             r#"
+            cargo-features = ["namespaced-features"]
+
             [project]
             name = "foo"
             version = "0.0.1"
@@ -1837,7 +1845,10 @@ fn namespaced_implicit_feature() {
         .file("src/main.rs", "fn main() {}")
         .build();
 
-    assert_that(p.cargo("build"), execs().with_status(0));
+    assert_that(
+        p.cargo("build").masquerade_as_nightly_cargo(),
+        execs().with_status(0),
+    );
 }
 
 #[test]
@@ -1846,6 +1857,8 @@ fn namespaced_shadowed_dep() {
         .file(
             "Cargo.toml",
             r#"
+            cargo-features = ["namespaced-features"]
+
             [project]
             name = "foo"
             version = "0.0.1"
@@ -1863,7 +1876,7 @@ fn namespaced_shadowed_dep() {
         .build();
 
     assert_that(
-        p.cargo("build"),
+        p.cargo("build").masquerade_as_nightly_cargo(),
         execs().with_status(101).with_stderr(
             "\
 [ERROR] failed to parse manifest at `[..]`
@@ -1882,6 +1895,8 @@ fn namespaced_shadowed_non_optional() {
         .file(
             "Cargo.toml",
             r#"
+            cargo-features = ["namespaced-features"]
+
             [project]
             name = "foo"
             version = "0.0.1"
@@ -1899,7 +1914,7 @@ fn namespaced_shadowed_non_optional() {
         .build();
 
     assert_that(
-        p.cargo("build"),
+        p.cargo("build").masquerade_as_nightly_cargo(),
         execs().with_status(101).with_stderr(
             "\
 [ERROR] failed to parse manifest at `[..]`
@@ -1919,6 +1934,8 @@ fn namespaced_implicit_non_optional() {
         .file(
             "Cargo.toml",
             r#"
+            cargo-features = ["namespaced-features"]
+
             [project]
             name = "foo"
             version = "0.0.1"
@@ -1936,7 +1953,7 @@ fn namespaced_implicit_non_optional() {
         .build();
 
     assert_that(
-        p.cargo("build"),
+        p.cargo("build").masquerade_as_nightly_cargo(),
         execs().with_status(101).with_stderr(
             "\
 [ERROR] failed to parse manifest at `[..]`
@@ -1955,6 +1972,8 @@ fn namespaced_same_name() {
         .file(
             "Cargo.toml",
             r#"
+            cargo-features = ["namespaced-features"]
+
             [project]
             name = "foo"
             version = "0.0.1"
@@ -1971,5 +1990,8 @@ fn namespaced_same_name() {
         .file("src/main.rs", "fn main() {}")
         .build();
 
-    assert_that(p.cargo("build"), execs().with_status(0));
+    assert_that(
+        p.cargo("build").masquerade_as_nightly_cargo(),
+        execs().with_status(0),
+    );
 }