diff --git a/src/cargo/ops/tree/mod.rs b/src/cargo/ops/tree/mod.rs index 134670cf988..14c5509b313 100644 --- a/src/cargo/ops/tree/mod.rs +++ b/src/cargo/ops/tree/mod.rs @@ -213,7 +213,15 @@ pub fn build_and_print(ws: &Workspace<'_>, opts: &TreeOptions) -> CargoResult<() }) .collect::>>()?; - print(ws.config(), opts, root_indexes, &pkgs_to_prune, &graph)?; + if root_indexes.len() == 0 { + ws.config().shell().warn( + "nothing to print.\n\n\ + To find dependencies that require specific target platforms, \ + try use option `--target all` first, and then narrow your search scope accordingly.", + )?; + } else { + print(ws.config(), opts, root_indexes, &pkgs_to_prune, &graph)?; + } Ok(()) } diff --git a/tests/testsuite/tree.rs b/tests/testsuite/tree.rs index d053c473176..4d3aee4fcb9 100644 --- a/tests/testsuite/tree.rs +++ b/tests/testsuite/tree.rs @@ -489,6 +489,62 @@ foo v0.1.0 ([..]/foo) .run(); } +#[cargo_test] +fn no_selected_target_dependency() { + // --target flag + if cross_compile::disabled() { + return; + } + Package::new("targetdep", "1.0.0").publish(); + + let p = project() + .file( + "Cargo.toml", + &format!( + r#" + [package] + name = "foo" + version = "0.1.0" + + [target.'{alt}'.dependencies] + targetdep = "1.0" + + "#, + alt = alternate(), + ), + ) + .file("src/lib.rs", "") + .file("build.rs", "fn main() {}") + .build(); + + p.cargo("tree") + .with_stdout( + "\ +foo v0.1.0 ([..]/foo) +", + ) + .run(); + + p.cargo("tree -i targetdep") + .with_stderr( + "\ +[WARNING] nothing to print. + +To find dependencies that require specific target platforms, \ +try use option `--target all` first, and then narrow your search scope accordingly. +", + ) + .run(); + p.cargo("tree -i targetdep --target all") + .with_stdout( + "\ +targetdep v1.0.0 +└── foo v0.1.0 ([..]/foo) +", + ) + .run(); +} + #[cargo_test] fn dep_kinds() { Package::new("inner-devdep", "1.0.0").publish();