From 38a05fe852f5c2923b06a268815fb12737c8108e Mon Sep 17 00:00:00 2001 From: BennD Date: Mon, 4 Dec 2023 22:40:10 +0100 Subject: [PATCH] Add `--direct-dependencies-only` option --- src/cli.rs | 9 +++++++++ src/graph/build.rs | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/cli.rs b/src/cli.rs index d399df2..6bb5265 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -10,6 +10,7 @@ pub(crate) struct Config { pub include: Vec, pub root: Vec, pub workspace_only: bool, + pub direct_dependencies_only: bool, pub focus: Vec, pub features: Vec, @@ -108,6 +109,12 @@ pub(crate) fn parse_options() -> Config { .action(ArgAction::SetTrue) .help("Exclude all packages outside of the workspace"), ) + .arg( + Arg::new("direct_dependencies_only") + .long("direct-dependencies-only") + .action(ArgAction::SetTrue) + .help("Only list direct dependencies of workspace crates"), + ) .arg( Arg::new("focus") .long("focus") @@ -198,6 +205,7 @@ pub(crate) fn parse_options() -> Config { let include = matches.get_many("include").map_or_else(Vec::new, collect_owned); let root = matches.get_many("root").map_or_else(Vec::new, collect_owned); let workspace_only = matches.get_flag("workspace_only"); + let direct_dependencies_only = matches.get_flag("direct_dependencies_only"); let focus = matches.get_many("focus").map_or_else(Vec::new, collect_owned); let features = matches.get_many("features").map_or_else(Vec::new, collect_owned); @@ -220,6 +228,7 @@ pub(crate) fn parse_options() -> Config { include, root, workspace_only, + direct_dependencies_only, focus, features, all_features, diff --git a/src/graph/build.rs b/src/graph/build.rs index 8e004f5..70f4c8a 100644 --- a/src/graph/build.rs +++ b/src/graph/build.rs @@ -98,7 +98,12 @@ pub(crate) fn get_dep_graph(metadata: Metadata, config: &Config) -> anyhow::Resu } let idx = graph.add_node(dep_pkg); - deps_add_queue.push_back(dep.pkg.clone()); + + // Don't add any more dependencies to the queue if we only want direct dependencies + if !config.direct_dependencies_only { + deps_add_queue.push_back(dep.pkg.clone()); + } + v.insert(idx); idx }