Rename Dev to Group internally (#15557)

The "dev" naming is a pre-PEP 735 artifact.
This commit is contained in:
konsti 2025-08-27 20:35:43 +02:00 committed by GitHub
parent 960714d4d6
commit 7d49571336
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 125 additions and 113 deletions

View file

@ -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,
}

View file

@ -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;
};

View file

@ -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

View file

@ -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<Resolution, LockError> {
@ -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

View file

@ -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 {

View file

@ -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

View file

@ -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<Item = Self> + '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}"

View file

@ -53,7 +53,7 @@ pub enum PubGrubPackageInner {
Package {
name: PackageName,
extra: Option<ExtraName>,
dev: Option<GroupName>,
group: Option<GroupName>,
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<ConflictItemRef<'_>> {
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!(),
}
}

View file

@ -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

View file

@ -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 {

View file

@ -28,7 +28,7 @@ pub(crate) struct AnnotatedDist {
pub(crate) name: PackageName,
pub(crate) version: Version,
pub(crate) extra: Option<ExtraName>,
pub(crate) dev: Option<GroupName>,
pub(crate) group: Option<GroupName>,
pub(crate) hashes: HashDigests,
pub(crate) metadata: Option<Metadata>,
/// 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.

View file

@ -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<ResolverOutput> 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
};

View file

@ -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 {

View file

@ -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(),
));

View file

@ -817,7 +817,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
if let Some(ref extra) = edge.from_extra {
write!(msg, " (extra: {extra})").unwrap();
}
if let Some(ref dev) = edge.from_dev {
if let Some(ref dev) = edge.from_group {
write!(msg, " (group: {dev})").unwrap();
}
@ -827,7 +827,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
if let Some(ref extra) = edge.to_extra {
write!(msg, " (extra: {extra})").unwrap();
}
if let Some(ref dev) = edge.to_dev {
if let Some(ref dev) = edge.to_group {
write!(msg, " (group: {dev})").unwrap();
}
if let Some(marker) = edge.marker.contents() {
@ -1034,7 +1034,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
let PubGrubPackageInner::Package {
name,
extra: None,
dev: None,
group: None,
marker: MarkerTree::TRUE,
} = &**package
else {
@ -1103,7 +1103,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
PubGrubPackageInner::Marker { name, .. }
| PubGrubPackageInner::Extra { name, .. }
| PubGrubPackageInner::Dev { name, .. }
| PubGrubPackageInner::Group { name, .. }
| PubGrubPackageInner::Package { name, .. } => {
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<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
PubGrubPackageInner::Package {
name,
extra,
dev,
group,
marker: _,
} => {
// If we're excluding transitive dependencies, short-circuit.
@ -1858,7 +1858,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
&metadata.requires_dist,
&metadata.dependency_groups,
extra.as_ref(),
dev.as_ref(),
group.as_ref(),
Some(name),
env,
python_requirement,
@ -1869,7 +1869,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
PubGrubDependency::from_requirement(
&self.conflicts,
requirement,
dev.as_ref(),
group.as_ref(),
Some(package),
)
})
@ -1890,7 +1890,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
package: PubGrubPackage::from(PubGrubPackageInner::Package {
name: name.clone(),
extra: None,
dev: None,
group: None,
marker,
}),
version: Range::singleton(version.clone()),
@ -1918,7 +1918,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
package: PubGrubPackage::from(PubGrubPackageInner::Package {
name: name.clone(),
extra: extra.cloned(),
dev: None,
group: None,
marker,
}),
version: Range::singleton(version.clone()),
@ -1931,7 +1931,11 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
}
// Add a dependency on the dependency group, with and without the marker.
PubGrubPackageInner::Dev { name, dev, marker } => {
PubGrubPackageInner::Group {
name,
group,
marker,
} => {
return Ok(Dependencies::Unforkable(
[MarkerTree::TRUE, *marker]
.into_iter()
@ -1940,7 +1944,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
package: PubGrubPackage::from(PubGrubPackageInner::Package {
name: name.clone(),
extra: None,
dev: Some(dev.clone()),
group: Some(group.clone()),
marker,
}),
version: Range::singleton(version.clone()),
@ -2669,7 +2673,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
PubGrubPackageInner::System(_) => {}
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<VerbatimParsedUrl>,
pub(crate) from_index: Option<IndexUrl>,
pub(crate) from_extra: Option<ExtraName>,
pub(crate) from_dev: Option<GroupName>,
pub(crate) from_group: Option<GroupName>,
pub(crate) to: PackageName,
pub(crate) to_version: Version,
pub(crate) to_url: Option<VerbatimParsedUrl>,
pub(crate) to_index: Option<IndexUrl>,
pub(crate) to_extra: Option<ExtraName>,
pub(crate) to_dev: Option<GroupName>,
pub(crate) to_group: Option<GroupName>,
pub(crate) marker: MarkerTree,
}