Skip to content

Commit

Permalink
Add DeriviationTree.packages -> HashSet<&P>
Browse files Browse the repository at this point in the history
  • Loading branch information
zanieb committed Dec 8, 2023
1 parent a1d584a commit 330fdc7
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
//! Build a report as clear as possible as to why
//! dependency solving failed.

use std::collections::HashSet;
use std::fmt;
use std::ops::{Deref, DerefMut};

Expand Down Expand Up @@ -72,6 +73,31 @@ pub struct Derived<P: Package, VS: VersionSet> {
}

impl<P: Package, VS: VersionSet> DerivationTree<P, VS> {
/// Get all [Package]s referred to in the deriviation tree.
pub fn packages(&self) -> HashSet<&P> {
let mut packages = HashSet::default();
match self {
Self::External(external) => match external {
External::FromDependencyOf(p, _, p2, _) => {
packages.insert(p);
packages.insert(p2);
}
External::NoVersions(p, _)
| External::NotRoot(p, _)
| External::UnavailableDependencies(p, _)
| External::UnusableDependencies(p, ..) => {
packages.insert(p);
}
},
Self::Derived(derived) => {
packages.extend(derived.terms.keys());
packages.extend(derived.cause1.packages().iter());
packages.extend(derived.cause2.packages().iter());
}
}
packages
}

/// Merge the [NoVersions](External::NoVersions) external incompatibilities
/// with the other one they are matched with
/// in a derived incompatibility.
Expand Down

0 comments on commit 330fdc7

Please sign in to comment.