Skip to content

Commit

Permalink
Add a reason to the NoVersions incompatibility (#22)
Browse files Browse the repository at this point in the history
  • Loading branch information
zanieb authored and konstin committed Jun 1, 2024
1 parent 06fa12c commit 910e5d9
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 12 deletions.
2 changes: 1 addition & 1 deletion examples/unsat_root_message_no_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ impl ReportFormatter<Package, Range<SemanticVersion>, String> for CustomReportFo
External::NotRoot(package, version) => {
format!("we are solving dependencies of {package} {version}")
}
External::NoVersions(package, set) => {
External::NoVersions(package, set, _) => {
if set == &Range::full() {
format!("there is no available version for {package}")
} else {
Expand Down
6 changes: 2 additions & 4 deletions src/internal/incompatibility.rs
Original file line number Diff line number Diff line change
Expand Up @@ -354,12 +354,10 @@ impl<P: Package, VS: VersionSet, M: Eq + Clone + Debug + Display> fmt::Display

#[cfg(test)]
pub mod tests {
use proptest::prelude::*;

use super::*;
use crate::range::Range;
use crate::term::tests::strategy as term_strat;

use super::*;
use proptest::prelude::*;

proptest! {

Expand Down
13 changes: 6 additions & 7 deletions src/report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ pub enum DerivationTree<P: Package, VS: VersionSet, M: Eq + Clone + Debug + Disp
pub enum External<P: Package, VS: VersionSet, M: Eq + Clone + Debug + Display> {
/// Initial incompatibility aiming at picking the root package for the first decision.
NotRoot(P, VS::V),
/// There are no versions in the given set for this package.
NoVersions(P, VS),
/// There are no versions in the given set for this package. A string reason is included.
NoVersions(P, VS, Option<String>),
/// Incompatibility coming from the dependencies of a given package.
FromDependencyOf(P, VS, P, VS),
/// The package is unusable for reasons outside pubgrub.
Expand Down Expand Up @@ -80,7 +80,7 @@ impl<P: Package, VS: VersionSet, M: Eq + Clone + Debug + Display> DerivationTree
packages.insert(p);
packages.insert(p2);
}
External::NoVersions(p, _)
External::NoVersions(p, _, _)
| External::NotRoot(p, _)
| External::Custom(p, _, _) => {
packages.insert(p);
Expand Down Expand Up @@ -113,14 +113,14 @@ impl<P: Package, VS: VersionSet, M: Eq + Clone + Debug + Display> DerivationTree
Arc::make_mut(&mut derived.cause1),
Arc::make_mut(&mut derived.cause2),
) {
(DerivationTree::External(External::NoVersions(p, r)), ref mut cause2) => {
(DerivationTree::External(External::NoVersions(p, r, _)), ref mut cause2) => {
cause2.collapse_no_versions();
*self = cause2
.clone()
.merge_no_versions(p.to_owned(), r.to_owned())
.unwrap_or_else(|| self.to_owned());
}
(ref mut cause1, DerivationTree::External(External::NoVersions(p, r))) => {
(ref mut cause1, DerivationTree::External(External::NoVersions(p, r, _))) => {
cause1.collapse_no_versions();
*self = cause1
.clone()
Expand All @@ -144,7 +144,6 @@ impl<P: Package, VS: VersionSet, M: Eq + Clone + Debug + Display> DerivationTree
DerivationTree::External(External::NotRoot(_, _)) => {
panic!("How did we end up with a NoVersions merged with a NotRoot?")
}
//
// Cannot be merged because the reason may not match
DerivationTree::External(External::NoVersions(_, _)) => None,
DerivationTree::External(External::Custom(_, r, reason)) => Some(
Expand Down Expand Up @@ -179,7 +178,7 @@ impl<P: Package, VS: VersionSet, M: Eq + Clone + Debug + Display> fmt::Display
Self::NotRoot(package, version) => {
write!(f, "we are solving dependencies of {} {}", package, version)
}
Self::NoVersions(package, set) => {
Self::NoVersions(package, set, _) => {
if set == &VS::full() {
write!(f, "there is no available version for {}", package)
} else {
Expand Down

0 comments on commit 910e5d9

Please sign in to comment.