diff --git a/Cargo.toml b/Cargo.toml index a51fce5..454f42a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ csv = "1" serde = "1" serde_derive = "1" serde_json = "1" -cargo_metadata = "0.14.0" +cargo_metadata = "0.15.0" semver = "1.0" clap = { version = "3.1.17", features = ["derive"] } atty = "0.2" diff --git a/src/lib.rs b/src/lib.rs index 6ce4d7b..4f765eb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -use anyhow::{anyhow, Result}; +use anyhow::Result; use cargo_metadata::{ DepKindInfo, DependencyKind, Metadata, MetadataCommand, Node, NodeDep, Package, PackageId, }; @@ -20,19 +20,25 @@ fn normalize(license_string: &str) -> String { fn get_node_name_filter(metadata: &Metadata, opt: &GetDependenciesOpt) -> Result> { let mut filter = HashSet::new(); - let root = metadata - .root_package() - .ok_or_else(|| anyhow!("No root package"))?; + let roots = if let Some(root) = metadata.root_package() { + vec![root] + } else { + metadata.workspace_packages() + }; if opt.root_only { - filter.insert(root.name.clone()); + for root in roots { + filter.insert(root.name.clone()); + } return Ok(filter); } if opt.direct_deps_only { - filter.insert(root.name.clone()); - for package in root.dependencies.iter() { - filter.insert(package.name.clone()); + for root in roots { + filter.insert(root.name.clone()); + for package in root.dependencies.iter() { + filter.insert(package.name.clone()); + } } } Ok(filter)