Make default-members apply to non-virtual workspaces too
authorSimon Sapin <simon.sapin@exyr.org>
Thu, 23 Nov 2017 15:25:12 +0000 (16:25 +0100)
committerSimon Sapin <simon.sapin@exyr.org>
Wed, 29 Nov 2017 09:59:19 +0000 (10:59 +0100)
src/cargo/core/workspace.rs
src/cargo/ops/cargo_compile.rs
tests/workspaces.rs

index 856b2597f429fb3248fce2d7199ede53af2edc9c..d9307526ba882b39d23facb55d710ac2ca1dc5c7 100644 (file)
@@ -399,8 +399,10 @@ impl<'cfg> Workspace<'cfg> {
                 }
                 self.default_members.push(manifest_path)
             }
-        } else {
+        } else if self.is_virtual() {
             self.default_members = self.members.clone()
+        } else {
+            self.default_members.push(self.current_manifest.clone())
         }
 
         self.find_path_deps(&root_manifest_path, &root_manifest_path, false)
index 9ef05f41d7a87ea8841864feaf6b7a73209009c6..53c5b99ebadc447037230443542bcc691e45a4b8 100644 (file)
@@ -149,18 +149,12 @@ impl<'a> Packages<'a> {
             Packages::Packages(packages) => {
                 packages.iter().map(|p| PackageIdSpec::parse(p)).collect::<CargoResult<Vec<_>>>()?
             }
-            Packages::Default if ws.is_virtual() => {
+            Packages::Default => {
                 ws.default_members()
                     .map(Package::package_id)
                     .map(PackageIdSpec::from_package_id)
                     .collect()
             }
-            Packages::Default => {
-                ws.current_opt()
-                    .map(Package::package_id)
-                    .map(PackageIdSpec::from_package_id)
-                    .into_iter().collect()
-            }
         };
         Ok(specs)
     }
index 4f5b63cca2db291eeeab61fb63f64c0278d31e3f..c90464318fa3b6644f388633776cf364d48df369 100644 (file)
@@ -46,6 +46,35 @@ fn simple_explicit() {
     assert_that(&p.root().join("bar/Cargo.lock"), is_not(existing_file()));
 }
 
+#[test]
+fn simple_explicit_default_members() {
+    let p = project("foo")
+        .file("Cargo.toml", r#"
+            [project]
+            name = "foo"
+            version = "0.1.0"
+            authors = []
+
+            [workspace]
+            members = ["bar"]
+            default-members = ["bar"]
+        "#)
+        .file("src/main.rs", "fn main() {}")
+        .file("bar/Cargo.toml", r#"
+            [project]
+            name = "bar"
+            version = "0.1.0"
+            authors = []
+            workspace = ".."
+        "#)
+        .file("bar/src/main.rs", "fn main() {}");
+    let p = p.build();
+
+    assert_that(p.cargo("build"), execs().with_status(0));
+    assert_that(&p.bin("bar"), existing_file());
+    assert_that(&p.bin("foo"), is_not(existing_file()));
+}
+
 #[test]
 fn inferred_root() {
     let p = project("foo")