Skip to content

Commit 7fc162b

Browse files
committed
Reverts
1 parent 1acf1a5 commit 7fc162b

File tree

19 files changed

+552
-90
lines changed

19 files changed

+552
-90
lines changed

crates/uv-resolver/src/pubgrub/dependencies.rs

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use std::iter;
22

33
use either::Either;
44
use pubgrub::Ranges;
5-
use tracing::warn;
65

76
use uv_normalize::{ExtraName, GroupName, PackageName};
87
use uv_pep440::{Version, VersionSpecifiers};
@@ -91,28 +90,23 @@ impl PubGrubDependency {
9190

9291
// Add the package, plus any extra variants.
9392
iter.map(|(extra, group)| PubGrubRequirement::from_requirement(requirement, extra, group))
94-
.filter_map(move |requirement| {
93+
.map(move |requirement| {
9594
let PubGrubRequirement {
9695
package,
9796
version,
9897
url,
9998
} = requirement;
10099
match &*package {
101-
PubGrubPackageInner::Package { name, .. } => {
102-
103-
Some(PubGrubDependency {
104-
package: package.clone(),
105-
version: version.clone(),
106-
url,
107-
})
108-
}
109-
PubGrubPackageInner::Marker { name, .. } => {
110-
Some(PubGrubDependency {
111-
package: package.clone(),
112-
version: version.clone(),
113-
url,
114-
})
115-
}
100+
PubGrubPackageInner::Package { .. } => PubGrubDependency {
101+
package: package.clone(),
102+
version: version.clone(),
103+
url,
104+
},
105+
PubGrubPackageInner::Marker { .. } => PubGrubDependency {
106+
package: package.clone(),
107+
version: version.clone(),
108+
url,
109+
},
116110
PubGrubPackageInner::Extra { name, .. } => {
117111
// Detect self-dependencies.
118112
if dev.is_none() {
@@ -121,11 +115,11 @@ impl PubGrubDependency {
121115
"extras not flattened for {name}"
122116
);
123117
}
124-
Some(PubGrubDependency {
118+
PubGrubDependency {
125119
package: package.clone(),
126120
version: version.clone(),
127121
url,
128-
})
122+
}
129123
}
130124
PubGrubPackageInner::Dev { name, .. } => {
131125
// Detect self-dependencies.
@@ -135,11 +129,11 @@ impl PubGrubDependency {
135129
"group not flattened for {name}"
136130
);
137131
}
138-
Some(PubGrubDependency {
132+
PubGrubDependency {
139133
package: package.clone(),
140134
version: version.clone(),
141135
url,
142-
})
136+
}
143137
}
144138
PubGrubPackageInner::Root(_) => unreachable!("root package in dependencies"),
145139
PubGrubPackageInner::Python(_) => {

crates/uv-resolver/src/pubgrub/report.rs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,15 @@ impl ReportFormatter<PubGrubPackage, Range<Version>, UnavailableReason>
133133
External::FromDependencyOf(package, package_set, dependency, dependency_set) => {
134134
let package_set = self.simplify_set(package_set, package);
135135
let dependency_set = self.simplify_set(dependency_set, dependency);
136+
137+
if package == dependency {
138+
return if let Some(member) = self.format_workspace_member(package) {
139+
format!("{member} depends on itself at an incompatible version")
140+
} else {
141+
format!("{package} depends on itself at an incompatible version")
142+
};
143+
}
144+
136145
if let Some(root) = self.format_root_requires(package) {
137146
return format!(
138147
"{root} {}",
@@ -362,7 +371,7 @@ impl PubGrubReportFormatter<'_> {
362371
if self.is_workspace() {
363372
if matches!(&**package, PubGrubPackageInner::Root(_)) {
364373
if self.is_single_project_workspace() {
365-
return Some("your projects's requirements".to_string());
374+
return Some("your project's requirements".to_string());
366375
}
367376
return Some("your workspace's requirements".to_string());
368377
}
@@ -407,6 +416,24 @@ impl PubGrubReportFormatter<'_> {
407416
}
408417
}
409418

419+
/// Return whether the given package is the root package.
420+
fn is_root(package: &PubGrubPackage) -> bool {
421+
matches!(&**package, PubGrubPackageInner::Root(_))
422+
}
423+
424+
/// Return whether the given package is a workspace member.
425+
fn is_single_project_workspace_member(&self, package: &PubGrubPackage) -> bool {
426+
match &**package {
427+
// TODO(zanieb): Improve handling of dev and extra for single-project workspaces
428+
PubGrubPackageInner::Package {
429+
name, extra, dev, ..
430+
} if self.workspace_members.contains(name) => {
431+
self.is_single_project_workspace() && extra.is_none() && dev.is_none()
432+
}
433+
_ => false,
434+
}
435+
}
436+
410437
/// Create a [`PackageRange::compatibility`] display with this formatter attached.
411438
fn compatible_range<'a>(
412439
&'a self,
@@ -467,6 +494,18 @@ impl PubGrubReportFormatter<'_> {
467494
.and(dependency2.package, &dependency_set2),
468495
)
469496
}
497+
(.., External::FromDependencyOf(package, _, dependency, _))
498+
if Self::is_root(package)
499+
&& self.is_single_project_workspace_member(dependency) =>
500+
{
501+
self.format_external(external1)
502+
}
503+
(External::FromDependencyOf(package, _, dependency, _), ..)
504+
if Self::is_root(package)
505+
&& self.is_single_project_workspace_member(dependency) =>
506+
{
507+
self.format_external(external2)
508+
}
470509
_ => {
471510
let external1 = self.format_external(external1);
472511
let external2 = self.format_external(external2);

crates/uv-resolver/src/resolver/mod.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2453,7 +2453,6 @@ impl ForkState {
24532453
extra: ref dependency_extra,
24542454
dev: ref dependency_dev,
24552455
marker: ref dependency_marker,
2456-
..
24572456
} => {
24582457
let to_url = self.fork_urls.get(dependency_name);
24592458
let to_index = self.fork_indexes.get(dependency_name);
@@ -2478,7 +2477,6 @@ impl ForkState {
24782477
PubGrubPackageInner::Marker {
24792478
name: ref dependency_name,
24802479
marker: ref dependency_marker,
2481-
..
24822480
} => {
24832481
let to_url = self.fork_urls.get(dependency_name);
24842482
let to_index = self.fork_indexes.get(dependency_name);
@@ -2504,7 +2502,6 @@ impl ForkState {
25042502
name: ref dependency_name,
25052503
extra: ref dependency_extra,
25062504
marker: ref dependency_marker,
2507-
..
25082505
} => {
25092506
// Insert an edge from the dependent package to the extra package.
25102507
let to_url = self.fork_urls.get(dependency_name);
@@ -2551,7 +2548,6 @@ impl ForkState {
25512548
name: ref dependency_name,
25522549
dev: ref dependency_dev,
25532550
marker: ref dependency_marker,
2554-
..
25552551
} => {
25562552
// Add an edge from the dependent package to the dev package, but _not_ the
25572553
// base package.

0 commit comments

Comments
 (0)