mirror of
https://github.com/astral-sh/uv.git
synced 2025-10-17 22:07:47 +00:00
Rename Dev
to Group
internally (#15557)
The "dev" naming is a pre-PEP 735 artifact.
This commit is contained in:
parent
960714d4d6
commit
7d49571336
15 changed files with 125 additions and 113 deletions
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}"
|
||||
|
|
|
@ -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!(),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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(),
|
||||
));
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue