@@ -1628,6 +1628,94 @@ fn exclude_but_also_depend() {
1628
1628
assert ! ( p. root( ) . join( "foo/bar/target" ) . is_dir( ) ) ;
1629
1629
}
1630
1630
1631
+ #[ cargo_test]
1632
+ fn excluded_default_members_still_must_be_members ( ) {
1633
+ let p = project ( )
1634
+ . file (
1635
+ "Cargo.toml" ,
1636
+ r#"
1637
+ [workspace]
1638
+ members = ["foo"]
1639
+ default-members = ["foo", "bar"]
1640
+ exclude = ["bar"]
1641
+ "# ,
1642
+ )
1643
+ . file ( "foo/Cargo.toml" , & basic_manifest ( "foo" , "0.1.0" ) )
1644
+ . file ( "foo/src/lib.rs" , "" )
1645
+ . file ( "bar/something.txt" , "" ) ;
1646
+ let p = p. build ( ) ;
1647
+ p. cargo ( "build" )
1648
+ . with_status ( 101 )
1649
+ . with_stderr (
1650
+ "\
1651
+ error: package `[..]bar` is listed in workspace’s default-members \
1652
+ but is not a member.
1653
+ " ,
1654
+ )
1655
+ . run ( ) ;
1656
+ }
1657
+
1658
+ #[ cargo_test]
1659
+ fn excluded_default_members_crate_glob ( ) {
1660
+ let p = project ( )
1661
+ . file (
1662
+ "Cargo.toml" ,
1663
+ r#"
1664
+ [workspace]
1665
+ members = ["foo", "bar/*"]
1666
+ default-members = ["bar/*"]
1667
+ exclude = ["bar/quux"]
1668
+ "# ,
1669
+ )
1670
+ . file ( "foo/Cargo.toml" , & basic_manifest ( "foo" , "0.1.0" ) )
1671
+ . file ( "foo/src/main.rs" , "fn main() {}" )
1672
+ . file ( "bar/baz/Cargo.toml" , & basic_manifest ( "baz" , "0.1.0" ) )
1673
+ . file ( "bar/baz/src/main.rs" , "fn main() {}" )
1674
+ . file ( "bar/quux/Cargo.toml" , & basic_manifest ( "quux" , "0.1.0" ) )
1675
+ . file ( "bar/quux/src/lib.rs" , "" ) ;
1676
+
1677
+ let p = p. build ( ) ;
1678
+ p. cargo ( "build" ) . run ( ) ;
1679
+
1680
+ assert ! ( p. root( ) . join( "target" ) . is_dir( ) ) ;
1681
+ assert ! ( !p. bin( "foo" ) . is_file( ) ) ;
1682
+ assert ! ( p. bin( "baz" ) . is_file( ) ) ;
1683
+
1684
+ p. cargo ( "build --workspace" ) . run ( ) ;
1685
+ assert ! ( p. root( ) . join( "target" ) . is_dir( ) ) ;
1686
+ assert ! ( p. bin( "foo" ) . is_file( ) ) ;
1687
+
1688
+ p. cargo ( "build" ) . cwd ( "bar/quux" ) . run ( ) ;
1689
+ assert ! ( p. root( ) . join( "bar/quux/target" ) . is_dir( ) ) ;
1690
+ }
1691
+
1692
+ #[ cargo_test]
1693
+ fn excluded_default_members_not_crate_glob ( ) {
1694
+ let p = project ( )
1695
+ . file (
1696
+ "Cargo.toml" ,
1697
+ r#"
1698
+ [workspace]
1699
+ members = ["foo", "bar/*"]
1700
+ default-members = ["bar/*"]
1701
+ exclude = ["bar/docs"]
1702
+ "# ,
1703
+ )
1704
+ . file ( "foo/Cargo.toml" , & basic_manifest ( "foo" , "0.1.0" ) )
1705
+ . file ( "foo/src/main.rs" , "fn main() {}" )
1706
+ . file ( "bar/baz/Cargo.toml" , & basic_manifest ( "baz" , "0.1.0" ) )
1707
+ . file ( "bar/baz/src/main.rs" , "fn main() {}" )
1708
+ . file ( "bar/docs/readme.txt" , "This folder is not a crate!" ) ;
1709
+
1710
+ let p = p. build ( ) ;
1711
+ p. cargo ( "build" ) . run ( ) ;
1712
+
1713
+ assert ! ( !p. bin( "foo" ) . is_file( ) ) ;
1714
+ assert ! ( p. bin( "baz" ) . is_file( ) ) ;
1715
+ p. cargo ( "build --workspace" ) . run ( ) ;
1716
+ assert ! ( p. bin( "foo" ) . is_file( ) ) ;
1717
+ }
1718
+
1631
1719
#[ cargo_test]
1632
1720
fn glob_syntax ( ) {
1633
1721
let p = project ( )
0 commit comments