From 7d4957133699f4180451bb66f86da602394bbd2c Mon Sep 17 00:00:00 2001 From: konsti Date: Wed, 27 Aug 2025 20:35:43 +0200 Subject: [PATCH] Rename `Dev` to `Group` internally (#15557) The "dev" naming is a pre-PEP 735 artifact. --- .../uv-distribution-types/src/resolution.rs | 10 +-- crates/uv-resolver/src/error.rs | 2 +- crates/uv-resolver/src/lock/export/mod.rs | 8 +- crates/uv-resolver/src/lock/installable.rs | 20 ++--- crates/uv-resolver/src/lock/mod.rs | 2 +- crates/uv-resolver/src/lock/tree.rs | 6 +- .../uv-resolver/src/pubgrub/dependencies.rs | 10 +-- crates/uv-resolver/src/pubgrub/package.rs | 58 ++++++++------- crates/uv-resolver/src/pubgrub/priority.rs | 2 +- crates/uv-resolver/src/pubgrub/report.rs | 12 +-- crates/uv-resolver/src/resolution/mod.rs | 4 +- crates/uv-resolver/src/resolution/output.rs | 22 +++--- .../src/resolver/batch_prefetch.rs | 6 +- crates/uv-resolver/src/resolver/derivation.rs | 2 +- crates/uv-resolver/src/resolver/mod.rs | 74 ++++++++++--------- 15 files changed, 125 insertions(+), 113 deletions(-) diff --git a/crates/uv-distribution-types/src/resolution.rs b/crates/uv-distribution-types/src/resolution.rs index 667eb0338..e11d194cf 100644 --- a/crates/uv-distribution-types/src/resolution.rs +++ b/crates/uv-distribution-types/src/resolution.rs @@ -118,11 +118,11 @@ pub enum ResolutionDiagnostic { /// The extra that was requested. For example, `colorama` in `black[colorama]`. extra: ExtraName, }, - MissingDev { + MissingGroup { /// The distribution that was requested with a non-existent development dependency group. dist: ResolvedDist, /// The development dependency group that was requested. - dev: GroupName, + group: GroupName, }, YankedVersion { /// The package that was requested with a yanked version. For example, `black==23.10.0`. @@ -144,9 +144,9 @@ impl Diagnostic for ResolutionDiagnostic { Self::MissingExtra { dist, extra } => { format!("The package `{dist}` does not have an extra named `{extra}`") } - Self::MissingDev { dist, dev } => { + Self::MissingGroup { dist, group } => { format!( - "The package `{dist}` does not have a development dependency group named `{dev}`" + "The package `{dist}` does not have a development dependency group named `{group}`" ) } Self::YankedVersion { dist, reason } => { @@ -170,7 +170,7 @@ impl Diagnostic for ResolutionDiagnostic { fn includes(&self, name: &PackageName) -> bool { match self { Self::MissingExtra { dist, .. } => name == dist.name(), - Self::MissingDev { dist, .. } => name == dist.name(), + Self::MissingGroup { dist, .. } => name == dist.name(), Self::YankedVersion { dist, .. } => name == dist.name(), Self::MissingLowerBound { package_name } => name == package_name, } diff --git a/crates/uv-resolver/src/error.rs b/crates/uv-resolver/src/error.rs index 0cc1f6847..3d3d778a1 100644 --- a/crates/uv-resolver/src/error.rs +++ b/crates/uv-resolver/src/error.rs @@ -775,7 +775,7 @@ fn collapse_no_versions_of_workspace_members( // Then, if the package is a workspace member... let (PubGrubPackageInner::Package { name, .. } | PubGrubPackageInner::Extra { name, .. } - | PubGrubPackageInner::Dev { name, .. }) = &**package + | PubGrubPackageInner::Group { name, .. }) = &**package else { return; }; diff --git a/crates/uv-resolver/src/lock/export/mod.rs b/crates/uv-resolver/src/lock/export/mod.rs index 326d46706..87d774b57 100644 --- a/crates/uv-resolver/src/lock/export/mod.rs +++ b/crates/uv-resolver/src/lock/export/mod.rs @@ -46,7 +46,7 @@ impl<'lock> ExportableRequirements<'lock> { target: &impl Installable<'lock>, prune: &[PackageName], extras: &ExtrasSpecificationWithDefaults, - dev: &DependencyGroupsWithDefaults, + groups: &DependencyGroupsWithDefaults, annotate: bool, install_options: &'lock InstallOptions, ) -> Self { @@ -76,7 +76,7 @@ impl<'lock> ExportableRequirements<'lock> { .expect("found too many packages matching root") .expect("could not find root"); - if dev.prod() { + if groups.prod() { // Add the workspace package to the graph. let index = *inverse .entry(&dist.id) @@ -103,7 +103,7 @@ impl<'lock> ExportableRequirements<'lock> { .dependency_groups .iter() .filter_map(|(group, deps)| { - if dev.contains(group) { + if groups.contains(group) { Some(deps.iter().map(move |dep| (group, dep))) } else { None @@ -163,7 +163,7 @@ impl<'lock> ExportableRequirements<'lock> { .dependency_groups() .iter() .filter_map(|(group, deps)| { - if dev.contains(group) { + if groups.contains(group) { Some(deps) } else { None diff --git a/crates/uv-resolver/src/lock/installable.rs b/crates/uv-resolver/src/lock/installable.rs index 7488436e3..884a111d4 100644 --- a/crates/uv-resolver/src/lock/installable.rs +++ b/crates/uv-resolver/src/lock/installable.rs @@ -38,7 +38,7 @@ pub trait Installable<'lock> { marker_env: &ResolverMarkerEnvironment, tags: &Tags, extras: &ExtrasSpecificationWithDefaults, - dev: &DependencyGroupsWithDefaults, + groups: &DependencyGroupsWithDefaults, build_options: &BuildOptions, install_options: &InstallOptions, ) -> Result { @@ -74,7 +74,7 @@ pub trait Installable<'lock> { })?; // Track the activated extras. - if dev.prod() { + if groups.prod() { activated_projects.push(&dist.id.name); for extra in extras.extra_names(dist.optional_dependencies.keys()) { activated_extras.push((&dist.id.name, extra)); @@ -85,7 +85,7 @@ pub trait Installable<'lock> { for group in dist .dependency_groups .keys() - .filter(|group| dev.contains(group)) + .filter(|group| groups.contains(group)) { activated_groups.push((&dist.id.name, group)); } @@ -106,7 +106,7 @@ pub trait Installable<'lock> { })?; // Add the workspace package to the graph. - let index = petgraph.add_node(if dev.prod() { + let index = petgraph.add_node(if groups.prod() { self.package_to_node(dist, tags, build_options, install_options)? } else { self.non_installable_node(dist, tags)? @@ -122,7 +122,7 @@ pub trait Installable<'lock> { // Add the workspace dependencies to the queue. for (dist, index) in roots { - if dev.prod() { + if groups.prod() { // Push its dependencies onto the queue. queue.push_back((dist, None)); for extra in extras.extra_names(dist.optional_dependencies.keys()) { @@ -135,7 +135,7 @@ pub trait Installable<'lock> { .dependency_groups .iter() .filter_map(|(group, deps)| { - if dev.contains(group) { + if groups.contains(group) { Some(deps.iter().map(move |dep| (group, dep))) } else { None @@ -172,7 +172,7 @@ pub trait Installable<'lock> { // referenced as a development dependency, then we need to re-enable it. let index = *entry.get(); let node = &mut petgraph[index]; - if !dev.prod() { + if !groups.prod() { *node = self.package_to_node( dep_dist, tags, @@ -225,7 +225,7 @@ pub trait Installable<'lock> { })?; // Add the package to the graph. - let index = petgraph.add_node(if dev.prod() { + let index = petgraph.add_node(if groups.prod() { self.package_to_node(dist, tags, build_options, install_options)? } else { self.non_installable_node(dist, tags)? @@ -253,7 +253,7 @@ pub trait Installable<'lock> { .dependency_groups() .iter() .filter_map(|(group, deps)| { - if dev.contains(group) { + if groups.contains(group) { Some(deps.iter().map(move |dep| (group, dep))) } else { None @@ -294,7 +294,7 @@ pub trait Installable<'lock> { // referenced as a development dependency, then we need to re-enable it. let index = *entry.get(); let node = &mut petgraph[index]; - if !dev.prod() { + if !groups.prod() { *node = self.package_to_node(dist, tags, build_options, install_options)?; } index diff --git a/crates/uv-resolver/src/lock/mod.rs b/crates/uv-resolver/src/lock/mod.rs index 6c8faadf5..7f5d37818 100644 --- a/crates/uv-resolver/src/lock/mod.rs +++ b/crates/uv-resolver/src/lock/mod.rs @@ -314,7 +314,7 @@ impl Lock { )?; } } - if let Some(group) = dist.dev.as_ref() { + if let Some(group) = dist.group.as_ref() { let id = PackageId::from_annotated_dist(dist, root)?; let Some(package) = packages.get_mut(&id) else { return Err(LockErrorKind::MissingDevBase { diff --git a/crates/uv-resolver/src/lock/tree.rs b/crates/uv-resolver/src/lock/tree.rs index 604c1446b..431147ddf 100644 --- a/crates/uv-resolver/src/lock/tree.rs +++ b/crates/uv-resolver/src/lock/tree.rs @@ -41,7 +41,7 @@ impl<'env> TreeDisplay<'env> { depth: usize, prune: &[PackageName], packages: &[PackageName], - dev: &DependencyGroupsWithDefaults, + groups: &DependencyGroupsWithDefaults, no_dedupe: bool, invert: bool, ) -> Self { @@ -95,7 +95,7 @@ impl<'env> TreeDisplay<'env> { // Add an edge from the root. graph.add_edge(root, index, Edge::Prod(None)); - if dev.prod() { + if groups.prod() { // Push its dependencies on the queue. if seen.insert((id, None)) { queue.push_back((id, None)); @@ -114,7 +114,7 @@ impl<'env> TreeDisplay<'env> { .dependency_groups .iter() .filter_map(|(group, deps)| { - if dev.contains(group) { + if groups.contains(group) { Some(deps.iter().map(move |dep| (group, dep))) } else { None diff --git a/crates/uv-resolver/src/pubgrub/dependencies.rs b/crates/uv-resolver/src/pubgrub/dependencies.rs index 0091b789e..7ef848ab2 100644 --- a/crates/uv-resolver/src/pubgrub/dependencies.rs +++ b/crates/uv-resolver/src/pubgrub/dependencies.rs @@ -44,12 +44,12 @@ impl PubGrubDependency { pub(crate) fn from_requirement<'a>( conflicts: &Conflicts, requirement: Cow<'a, Requirement>, - dev: Option<&'a GroupName>, + group_name: Option<&'a GroupName>, parent_package: Option<&'a PubGrubPackage>, ) -> impl Iterator + 'a { let parent_name = parent_package.and_then(|package| package.name_no_root()); let is_normal_parent = parent_package - .map(|pp| pp.extra().is_none() && pp.dev().is_none()) + .map(|pp| pp.extra().is_none() && pp.group().is_none()) .unwrap_or(false); let iter = if !requirement.extras.is_empty() { // This is crazy subtle, but if any of the extras in the @@ -128,7 +128,7 @@ impl PubGrubDependency { url, }, PubGrubPackageInner::Extra { name, .. } => { - if dev.is_none() { + if group_name.is_none() { debug_assert!( parent_name.is_none_or(|parent_name| parent_name != name), "extras not flattened for {name}" @@ -141,8 +141,8 @@ impl PubGrubDependency { url, } } - PubGrubPackageInner::Dev { name, .. } => { - if dev.is_none() { + PubGrubPackageInner::Group { name, .. } => { + if group_name.is_none() { debug_assert!( parent_name.is_none_or(|parent_name| parent_name != name), "group not flattened for {name}" diff --git a/crates/uv-resolver/src/pubgrub/package.rs b/crates/uv-resolver/src/pubgrub/package.rs index 42cace0a4..b0693b01b 100644 --- a/crates/uv-resolver/src/pubgrub/package.rs +++ b/crates/uv-resolver/src/pubgrub/package.rs @@ -53,7 +53,7 @@ pub enum PubGrubPackageInner { Package { name: PackageName, extra: Option, - dev: Option, + group: Option, marker: MarkerTree, }, /// A proxy package to represent a dependency with an extra (e.g., `black[colorama]`). @@ -74,14 +74,14 @@ pub enum PubGrubPackageInner { extra: ExtraName, marker: MarkerTree, }, - /// A proxy package to represent an enabled "dependency group" (e.g., development dependencies). + /// A proxy package to represent an enabled dependency group. /// /// This is similar in spirit to [PEP 735](https://peps.python.org/pep-0735/) and similar in /// implementation to the `Extra` variant. The main difference is that we treat groups as /// enabled globally, rather than on a per-requirement basis. - Dev { + Group { name: PackageName, - dev: GroupName, + group: GroupName, marker: MarkerTree, }, /// A proxy package for a base package with a marker (e.g., `black; python_version >= "3.6"`). @@ -115,15 +115,19 @@ impl PubGrubPackage { extra, marker, })) - } else if let Some(dev) = group { - Self(Arc::new(PubGrubPackageInner::Dev { name, dev, marker })) + } else if let Some(group) = group { + Self(Arc::new(PubGrubPackageInner::Group { + name, + group, + marker, + })) } else if !marker.is_true() { Self(Arc::new(PubGrubPackageInner::Marker { name, marker })) } else { Self(Arc::new(PubGrubPackageInner::Package { name, extra, - dev: None, + group: None, marker, })) } @@ -139,7 +143,7 @@ impl PubGrubPackage { | PubGrubPackageInner::System(name) | PubGrubPackageInner::Package { name, .. } | PubGrubPackageInner::Extra { name, .. } - | PubGrubPackageInner::Dev { name, .. } + | PubGrubPackageInner::Group { name, .. } | PubGrubPackageInner::Marker { name, .. } => Some(name), } } @@ -153,7 +157,7 @@ impl PubGrubPackage { | PubGrubPackageInner::System(_) => None, PubGrubPackageInner::Package { name, .. } | PubGrubPackageInner::Extra { name, .. } - | PubGrubPackageInner::Dev { name, .. } + | PubGrubPackageInner::Group { name, .. } | PubGrubPackageInner::Marker { name, .. } => Some(name), } } @@ -169,7 +173,7 @@ impl PubGrubPackage { | PubGrubPackageInner::System(_) => MarkerTree::TRUE, PubGrubPackageInner::Package { marker, .. } | PubGrubPackageInner::Extra { marker, .. } - | PubGrubPackageInner::Dev { marker, .. } => *marker, + | PubGrubPackageInner::Group { marker, .. } => *marker, PubGrubPackageInner::Marker { marker, .. } => *marker, } } @@ -186,7 +190,7 @@ impl PubGrubPackage { | PubGrubPackageInner::Python(_) | PubGrubPackageInner::System(_) | PubGrubPackageInner::Package { extra: None, .. } - | PubGrubPackageInner::Dev { .. } + | PubGrubPackageInner::Group { .. } | PubGrubPackageInner::Marker { .. } => None, PubGrubPackageInner::Package { extra: Some(extra), .. @@ -195,22 +199,24 @@ impl PubGrubPackage { } } - /// Returns the dev (aka "group") name associated with this PubGrub + /// Returns the dependency group name associated with this PubGrub /// package, if it has one. /// /// Note that if this returns `Some`, then `extra` must return `None`. - pub(crate) fn dev(&self) -> Option<&GroupName> { + pub(crate) fn group(&self) -> Option<&GroupName> { match &**self { // A root can never be a dependency of another package, and a `Python` pubgrub // package is never returned by `get_dependencies`. So these cases never occur. PubGrubPackageInner::Root(_) | PubGrubPackageInner::Python(_) | PubGrubPackageInner::System(_) - | PubGrubPackageInner::Package { dev: None, .. } + | PubGrubPackageInner::Package { group: None, .. } | PubGrubPackageInner::Extra { .. } | PubGrubPackageInner::Marker { .. } => None, - PubGrubPackageInner::Package { dev: Some(dev), .. } - | PubGrubPackageInner::Dev { dev, .. } => Some(dev), + PubGrubPackageInner::Package { + group: Some(group), .. + } + | PubGrubPackageInner::Group { group, .. } => Some(group), } } @@ -220,7 +226,7 @@ impl PubGrubPackage { /// this returns `None`. pub(crate) fn conflicting_item(&self) -> Option> { let package = self.name_no_root()?; - match (self.extra(), self.dev()) { + match (self.extra(), self.group()) { (None, None) => Some(ConflictItemRef::from(package)), (Some(extra), None) => Some(ConflictItemRef::from((package, extra))), (None, Some(group)) => Some(ConflictItemRef::from((package, group))), @@ -244,7 +250,7 @@ impl PubGrubPackage { matches!( &**self, PubGrubPackageInner::Extra { .. } - | PubGrubPackageInner::Dev { .. } + | PubGrubPackageInner::Group { .. } | PubGrubPackageInner::Marker { .. } ) } @@ -267,7 +273,7 @@ impl PubGrubPackage { | PubGrubPackageInner::System(_) => {} PubGrubPackageInner::Package { ref mut marker, .. } | PubGrubPackageInner::Extra { ref mut marker, .. } - | PubGrubPackageInner::Dev { ref mut marker, .. } + | PubGrubPackageInner::Group { ref mut marker, .. } | PubGrubPackageInner::Marker { ref mut marker, .. } => { *marker = python_requirement.simplify_markers(*marker); } @@ -283,7 +289,7 @@ impl PubGrubPackage { PubGrubPackageInner::System(_) => "system", PubGrubPackageInner::Package { .. } => "package", PubGrubPackageInner::Extra { .. } => "extra", - PubGrubPackageInner::Dev { .. } => "dev", + PubGrubPackageInner::Group { .. } => "group", PubGrubPackageInner::Marker { .. } => "marker", } } @@ -318,7 +324,7 @@ impl std::fmt::Display for PubGrubPackageInner { name, extra: None, marker, - dev: None, + group: None, } => { if let Some(marker) = marker.contents() { write!(f, "{name}{{{marker}}}") @@ -330,7 +336,7 @@ impl std::fmt::Display for PubGrubPackageInner { name, extra: Some(extra), marker, - dev: None, + group: None, } => { if let Some(marker) = marker.contents() { write!(f, "{name}[{extra}]{{{marker}}}") @@ -342,7 +348,7 @@ impl std::fmt::Display for PubGrubPackageInner { name, extra: None, marker, - dev: Some(dev), + group: Some(dev), } => { if let Some(marker) = marker.contents() { write!(f, "{name}:{dev}{{{marker}}}") @@ -358,13 +364,15 @@ impl std::fmt::Display for PubGrubPackageInner { } } Self::Extra { name, extra, .. } => write!(f, "{name}[{extra}]"), - Self::Dev { name, dev, .. } => write!(f, "{name}:{dev}"), + Self::Group { + name, group: dev, .. + } => write!(f, "{name}:{dev}"), // It is guaranteed that `extra` and `dev` are never set at the same time. Self::Package { name: _, extra: Some(_), marker: _, - dev: Some(_), + group: Some(_), } => unreachable!(), } } diff --git a/crates/uv-resolver/src/pubgrub/priority.rs b/crates/uv-resolver/src/pubgrub/priority.rs index 166c7a283..adfd044f0 100644 --- a/crates/uv-resolver/src/pubgrub/priority.rs +++ b/crates/uv-resolver/src/pubgrub/priority.rs @@ -132,7 +132,7 @@ impl PubGrubPriorities { PubGrubPackageInner::System(_) => (PubGrubPriority::Root, PubGrubTiebreaker::from(3)), PubGrubPackageInner::Marker { name, .. } | PubGrubPackageInner::Extra { name, .. } - | PubGrubPackageInner::Dev { name, .. } + | PubGrubPackageInner::Group { name, .. } | PubGrubPackageInner::Package { name, .. } => { // To ensure deterministic resolution, each (virtual) package needs to be registered // on discovery (as dependency of another package), before we query it for diff --git a/crates/uv-resolver/src/pubgrub/report.rs b/crates/uv-resolver/src/pubgrub/report.rs index 1779bf242..1c7bfceb2 100644 --- a/crates/uv-resolver/src/pubgrub/report.rs +++ b/crates/uv-resolver/src/pubgrub/report.rs @@ -400,9 +400,9 @@ impl PubGrubReportFormatter<'_> { match &**package { // TODO(zanieb): Improve handling of dev and extra for single-project workspaces PubGrubPackageInner::Package { - name, extra, dev, .. + name, extra, group, .. } if self.workspace_members.contains(name) => { - if self.is_single_project_workspace() && extra.is_none() && dev.is_none() { + if self.is_single_project_workspace() && extra.is_none() && group.is_none() { Some("your project".to_string()) } else { Some(format!("{package}")) @@ -411,7 +411,7 @@ impl PubGrubReportFormatter<'_> { PubGrubPackageInner::Extra { name, .. } if self.workspace_members.contains(name) => { Some(format!("{package}")) } - PubGrubPackageInner::Dev { name, .. } if self.workspace_members.contains(name) => { + PubGrubPackageInner::Group { name, .. } if self.workspace_members.contains(name) => { Some(format!("{package}")) } _ => None, @@ -428,9 +428,9 @@ impl PubGrubReportFormatter<'_> { match &**package { // TODO(zanieb): Improve handling of dev and extra for single-project workspaces PubGrubPackageInner::Package { - name, extra, dev, .. + name, extra, group, .. } if self.workspace_members.contains(name) => { - self.is_single_project_workspace() && extra.is_none() && dev.is_none() + self.is_single_project_workspace() && extra.is_none() && group.is_none() } _ => false, } @@ -647,7 +647,7 @@ impl PubGrubReportFormatter<'_> { if package_name == dependency_name && (dependency.extra().is_none() || package.extra() == dependency.extra()) - && (dependency.dev().is_none() || dependency.dev() == package.dev()) + && (dependency.group().is_none() || dependency.group() == package.group()) && workspace_members.contains(package_name) { output_hints.insert(PubGrubHint::DependsOnItself { diff --git a/crates/uv-resolver/src/resolution/mod.rs b/crates/uv-resolver/src/resolution/mod.rs index 59dc6ccb9..edc69e10d 100644 --- a/crates/uv-resolver/src/resolution/mod.rs +++ b/crates/uv-resolver/src/resolution/mod.rs @@ -28,7 +28,7 @@ pub(crate) struct AnnotatedDist { pub(crate) name: PackageName, pub(crate) version: Version, pub(crate) extra: Option, - pub(crate) dev: Option, + pub(crate) group: Option, pub(crate) hashes: HashDigests, pub(crate) metadata: Option, /// The "full" marker for this distribution. It precisely describes all @@ -43,7 +43,7 @@ impl AnnotatedDist { /// Returns `true` if the [`AnnotatedDist`] is a base package (i.e., not an extra or a /// dependency group). pub(crate) fn is_base(&self) -> bool { - self.extra.is_none() && self.dev.is_none() + self.extra.is_none() && self.group.is_none() } /// Returns the [`IndexUrl`] of the distribution, if it is from a registry. diff --git a/crates/uv-resolver/src/resolution/output.rs b/crates/uv-resolver/src/resolution/output.rs index c69c2e21e..35968e671 100644 --- a/crates/uv-resolver/src/resolution/output.rs +++ b/crates/uv-resolver/src/resolution/output.rs @@ -87,7 +87,7 @@ impl ResolutionGraphNode { match self { Self::Root => None, Self::Dist(dist) => { - let group = dist.dev.as_ref()?; + let group = dist.group.as_ref()?; Some((&dist.name, group)) } } @@ -294,7 +294,7 @@ impl ResolverOutput { url: edge.from_url.as_ref(), index: edge.from_index.as_ref(), extra: edge.from_extra.as_ref(), - group: edge.from_dev.as_ref(), + group: edge.from_group.as_ref(), }] }); let to_index = inverse[&PackageRef { @@ -303,7 +303,7 @@ impl ResolverOutput { url: edge.to_url.as_ref(), index: edge.to_index.as_ref(), extra: edge.to_extra.as_ref(), - group: edge.to_dev.as_ref(), + group: edge.to_group.as_ref(), }]; let edge_marker = { @@ -338,7 +338,7 @@ impl ResolverOutput { let ResolutionPackage { name, extra, - dev, + dev: group, url, index, } = &package; @@ -367,11 +367,11 @@ impl ResolverOutput { } // Validate the development dependency group. - if let Some(dev) = dev { + if let Some(dev) = group { if !metadata.dependency_groups.contains_key(dev) { - diagnostics.push(ResolutionDiagnostic::MissingDev { + diagnostics.push(ResolutionDiagnostic::MissingGroup { dist: dist.clone(), - dev: dev.clone(), + group: dev.clone(), }); } } @@ -383,7 +383,7 @@ impl ResolverOutput { name: name.clone(), version: version.clone(), extra: extra.clone(), - dev: dev.clone(), + group: group.clone(), hashes, metadata, marker: UniversalMarker::TRUE, @@ -395,7 +395,7 @@ impl ResolverOutput { url: url.as_ref(), index: index.as_ref(), extra: extra.as_ref(), - group: dev.as_ref(), + group: group.as_ref(), }, node, ); @@ -914,8 +914,8 @@ impl From for uv_distribution_types::Resolution { let edge = if let Some(extra) = source_dist.extra.as_ref() { Edge::Optional(extra.clone()) - } else if let Some(dev) = source_dist.dev.as_ref() { - Edge::Dev(dev.clone()) + } else if let Some(group) = source_dist.group.as_ref() { + Edge::Dev(group.clone()) } else { Edge::Prod }; diff --git a/crates/uv-resolver/src/resolver/batch_prefetch.rs b/crates/uv-resolver/src/resolver/batch_prefetch.rs index 37811c477..5a6253bf7 100644 --- a/crates/uv-resolver/src/resolver/batch_prefetch.rs +++ b/crates/uv-resolver/src/resolver/batch_prefetch.rs @@ -94,7 +94,7 @@ impl BatchPrefetcher { let PubGrubPackageInner::Package { name, extra: None, - dev: None, + group: None, marker: MarkerTree::TRUE, } = &**next else { @@ -149,7 +149,7 @@ impl BatchPrefetcher { let PubGrubPackageInner::Package { name, extra: None, - dev: None, + group: None, marker: MarkerTree::TRUE, } = &**package else { @@ -168,7 +168,7 @@ impl BatchPrefetcher { let PubGrubPackageInner::Package { name, extra: None, - dev: None, + group: None, marker: MarkerTree::TRUE, } = &**next else { diff --git a/crates/uv-resolver/src/resolver/derivation.rs b/crates/uv-resolver/src/resolver/derivation.rs index fe77d92bc..8699b9f77 100644 --- a/crates/uv-resolver/src/resolver/derivation.rs +++ b/crates/uv-resolver/src/resolver/derivation.rs @@ -53,7 +53,7 @@ impl DerivationChainBuilder { path.push(DerivationStep::new( name.clone(), p1.extra().cloned(), - p1.dev().cloned(), + p1.group().cloned(), Some(version.clone()), v2.clone(), )); diff --git a/crates/uv-resolver/src/resolver/mod.rs b/crates/uv-resolver/src/resolver/mod.rs index b91d80e3b..0ec707a40 100644 --- a/crates/uv-resolver/src/resolver/mod.rs +++ b/crates/uv-resolver/src/resolver/mod.rs @@ -817,7 +817,7 @@ impl ResolverState ResolverState ResolverState ResolverState { if let Some(url) = package.name().and_then(|name| fork_urls.get(name)) { self.choose_version_url(name, range, url, python_requirement) @@ -1762,7 +1762,7 @@ impl ResolverState { // If we're excluding transitive dependencies, short-circuit. @@ -1858,7 +1858,7 @@ impl ResolverState ResolverState ResolverState ResolverState ResolverState { + PubGrubPackageInner::Group { + name, + group, + marker, + } => { return Ok(Dependencies::Unforkable( [MarkerTree::TRUE, *marker] .into_iter() @@ -1940,7 +1944,7 @@ impl ResolverState ResolverState {} PubGrubPackageInner::Marker { .. } => {} PubGrubPackageInner::Extra { .. } => {} - PubGrubPackageInner::Dev { .. } => {} + PubGrubPackageInner::Group { .. } => {} PubGrubPackageInner::Package { name, .. } => { reporter.on_progress(name, &VersionOrUrlRef::Version(version)); } @@ -3058,13 +3062,13 @@ impl ForkState { let self_package = &self.pubgrub.package_store[self_package]; let dependency_package = &self.pubgrub.package_store[dependency_package]; - let (self_name, self_extra, self_dev) = match &**self_package { + let (self_name, self_extra, self_group) = match &**self_package { PubGrubPackageInner::Package { name: self_name, extra: self_extra, - dev: self_dev, + group: self_group, marker: _, - } => (Some(self_name), self_extra.as_ref(), self_dev.as_ref()), + } => (Some(self_name), self_extra.as_ref(), self_group.as_ref()), PubGrubPackageInner::Root(_) => (None, None, None), @@ -3079,7 +3083,7 @@ impl ForkState { PubGrubPackageInner::Package { name: ref dependency_name, extra: ref dependency_extra, - dev: ref dependency_dev, + group: ref dependency_dev, marker: ref dependency_marker, } => { debug_assert!( @@ -3093,7 +3097,7 @@ impl ForkState { // Ignore self-dependencies (e.g., `tensorflow-macos` depends on `tensorflow-macos`), // but allow groups to depend on other groups, or on the package itself. - if self_dev.is_none() { + if self_group.is_none() { if self_name == Some(dependency_name) { continue; } @@ -3107,13 +3111,13 @@ impl ForkState { from_url: self_url.cloned(), from_index: self_index.cloned(), from_extra: self_extra.cloned(), - from_dev: self_dev.cloned(), + from_group: self_group.cloned(), to: dependency_name.clone(), to_version: dependency_version.clone(), to_url: to_url.cloned(), to_index: to_index.cloned(), to_extra: dependency_extra.clone(), - to_dev: dependency_dev.clone(), + to_group: dependency_dev.clone(), marker: *dependency_marker, }; edges.push(edge); @@ -3125,7 +3129,7 @@ impl ForkState { } => { // Ignore self-dependencies (e.g., `tensorflow-macos` depends on `tensorflow-macos`), // but allow groups to depend on other groups, or on the package itself. - if self_dev.is_none() { + if self_group.is_none() { if self_name == Some(dependency_name) { continue; } @@ -3139,13 +3143,13 @@ impl ForkState { from_url: self_url.cloned(), from_index: self_index.cloned(), from_extra: self_extra.cloned(), - from_dev: self_dev.cloned(), + from_group: self_group.cloned(), to: dependency_name.clone(), to_version: dependency_version.clone(), to_url: to_url.cloned(), to_index: to_index.cloned(), to_extra: None, - to_dev: None, + to_group: None, marker: *dependency_marker, }; edges.push(edge); @@ -3156,7 +3160,7 @@ impl ForkState { extra: ref dependency_extra, marker: ref dependency_marker, } => { - if self_dev.is_none() { + if self_group.is_none() { debug_assert!( self_name != Some(dependency_name), "Extras should be flattened" @@ -3171,13 +3175,13 @@ impl ForkState { from_url: self_url.cloned(), from_index: self_index.cloned(), from_extra: self_extra.cloned(), - from_dev: self_dev.cloned(), + from_group: self_group.cloned(), to: dependency_name.clone(), to_version: dependency_version.clone(), to_url: to_url.cloned(), to_index: to_index.cloned(), to_extra: Some(dependency_extra.clone()), - to_dev: None, + to_group: None, marker: *dependency_marker, }; edges.push(edge); @@ -3189,21 +3193,21 @@ impl ForkState { from_url: self_url.cloned(), from_index: self_index.cloned(), from_extra: self_extra.cloned(), - from_dev: self_dev.cloned(), + from_group: self_group.cloned(), to: dependency_name.clone(), to_version: dependency_version.clone(), to_url: to_url.cloned(), to_index: to_index.cloned(), to_extra: None, - to_dev: None, + to_group: None, marker: *dependency_marker, }; edges.push(edge); } - PubGrubPackageInner::Dev { + PubGrubPackageInner::Group { name: ref dependency_name, - dev: ref dependency_dev, + group: ref dependency_group, marker: ref dependency_marker, } => { debug_assert!( @@ -3221,13 +3225,13 @@ impl ForkState { from_url: self_url.cloned(), from_index: self_index.cloned(), from_extra: self_extra.cloned(), - from_dev: self_dev.cloned(), + from_group: self_group.cloned(), to: dependency_name.clone(), to_version: dependency_version.clone(), to_url: to_url.cloned(), to_index: to_index.cloned(), to_extra: None, - to_dev: Some(dependency_dev.clone()), + to_group: Some(dependency_group.clone()), marker: *dependency_marker, }; edges.push(edge); @@ -3244,7 +3248,7 @@ impl ForkState { if let PubGrubPackageInner::Package { name, extra, - dev, + group, marker: MarkerTree::TRUE, } = &*self.pubgrub.package_store[package] { @@ -3253,7 +3257,7 @@ impl ForkState { ResolutionPackage { name: name.clone(), extra: extra.clone(), - dev: dev.clone(), + dev: group.clone(), url: url.cloned(), index: index.cloned(), }, @@ -3310,13 +3314,13 @@ pub(crate) struct ResolutionDependencyEdge { pub(crate) from_url: Option, pub(crate) from_index: Option, pub(crate) from_extra: Option, - pub(crate) from_dev: Option, + pub(crate) from_group: Option, pub(crate) to: PackageName, pub(crate) to_version: Version, pub(crate) to_url: Option, pub(crate) to_index: Option, pub(crate) to_extra: Option, - pub(crate) to_dev: Option, + pub(crate) to_group: Option, pub(crate) marker: MarkerTree, }