Implement uv tree --no-dev (#8109)

## Summary

Allow pruning dev-dependencies in uv tree.
This is not inherently in conflict with --invert, but this pruning is
not yet implemented there.
This commit is contained in:
bluss 2024-10-12 15:10:56 +02:00 committed by GitHub
parent a3b11dacb8
commit e67d87301a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 43 additions and 3 deletions

View file

@ -4,6 +4,7 @@ use std::collections::BTreeSet;
use itertools::Itertools;
use rustc_hash::{FxHashMap, FxHashSet};
use uv_configuration::DevMode;
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pypi_types::ResolverMarkerEnvironment;
@ -22,8 +23,10 @@ pub struct TreeDisplay<'env> {
optional_dependencies:
FxHashMap<&'env PackageId, FxHashMap<ExtraName, Vec<Cow<'env, Dependency>>>>,
dev_dependencies: FxHashMap<&'env PackageId, FxHashMap<GroupName, Vec<Cow<'env, Dependency>>>>,
/// Maximum display depth of the dependency tree
/// Maximum display depth of the dependency tree.
depth: usize,
/// Whether to include development dependencies in the display.
dev: DevMode,
/// Prune the given packages from the display of the dependency tree.
prune: Vec<PackageName>,
/// Display only the specified packages.
@ -40,6 +43,7 @@ impl<'env> TreeDisplay<'env> {
depth: usize,
prune: Vec<PackageName>,
packages: Vec<PackageName>,
dev: DevMode,
no_dedupe: bool,
invert: bool,
) -> Self {
@ -180,6 +184,7 @@ impl<'env> TreeDisplay<'env> {
optional_dependencies,
dev_dependencies,
depth,
dev,
prune,
packages,
no_dedupe,
@ -231,12 +236,14 @@ impl<'env> TreeDisplay<'env> {
let dependencies: Vec<Node<'env>> = self
.dependencies
.get(node.package_id())
.filter(|_| self.dev != DevMode::Only)
.into_iter()
.flatten()
.map(|dep| Node::Dependency(dep.as_ref()))
.chain(
self.optional_dependencies
.get(node.package_id())
.filter(|_| self.dev != DevMode::Only)
.into_iter()
.flatten()
.flat_map(|(extra, deps)| {
@ -247,6 +254,7 @@ impl<'env> TreeDisplay<'env> {
.chain(
self.dev_dependencies
.get(node.package_id())
.filter(|_| self.dev != DevMode::Exclude)
.into_iter()
.flatten()
.flat_map(|(group, deps)| {