Skip to content

Commit bba6006

Browse files
committed
Add DerivationTree.packages() -> HashSet<&P> (#11)
* Add `DeriviationTree.packages -> HashSet<&P>` * Fixup `main` * Use FxHashSet
1 parent 971d123 commit bba6006

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

examples/unsat_root_message_no_version.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ impl ReportFormatter<Package, Range<SemanticVersion>> for CustomReportFormatter
8080
format!("dependencies of {package} at version {set} are unavailable")
8181
}
8282
}
83+
External::UnusableDependencies(package, set, ..) => {
84+
if set == &Range::full() {
85+
format!("dependencies of {package} are unusable")
86+
} else {
87+
format!("dependencies of {package} at version {set} are unusable")
88+
}
89+
}
8390
External::FromDependencyOf(package, package_set, dependency, dependency_set) => {
8491
if package_set == &Range::full() && dependency_set == &Range::full() {
8592
format!("{package} depends on {dependency}")

src/report.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
use std::fmt;
77
use std::ops::{Deref, DerefMut};
88

9+
use rustc_hash::FxHashSet;
10+
911
use crate::package::Package;
1012
use crate::term::Term;
1113
use crate::type_aliases::Map;
@@ -72,6 +74,31 @@ pub struct Derived<P: Package, VS: VersionSet> {
7274
}
7375

7476
impl<P: Package, VS: VersionSet> DerivationTree<P, VS> {
77+
/// Get all [Package]s referred to in the deriviation tree.
78+
pub fn packages(&self) -> FxHashSet<&P> {
79+
let mut packages = FxHashSet::default();
80+
match self {
81+
Self::External(external) => match external {
82+
External::FromDependencyOf(p, _, p2, _) => {
83+
packages.insert(p);
84+
packages.insert(p2);
85+
}
86+
External::NoVersions(p, _)
87+
| External::NotRoot(p, _)
88+
| External::UnavailableDependencies(p, _)
89+
| External::UnusableDependencies(p, ..) => {
90+
packages.insert(p);
91+
}
92+
},
93+
Self::Derived(derived) => {
94+
packages.extend(derived.terms.keys());
95+
packages.extend(derived.cause1.packages().iter());
96+
packages.extend(derived.cause2.packages().iter());
97+
}
98+
}
99+
packages
100+
}
101+
75102
/// Merge the [NoVersions](External::NoVersions) external incompatibilities
76103
/// with the other one they are matched with
77104
/// in a derived incompatibility.

0 commit comments

Comments
 (0)