Skip to content

Commit fce8e02

Browse files
authored
Rename dependencies type to available and unavailable (#216)
In uv, dependencies are either available or unavailable. They are not unknown, but rather missing due to some brokenness: We're offline but the dep is not cached, the version list failed to deserialize, etc. (https://github.com/astral-sh/uv/blob/0b84eb01408eb0e90b5720b027359aac10708665/crates/uv-resolver/src/resolver/mod.rs#L945-L996). This change is a rename of the variants of `Dependencies` to reflect that, upstreaming the change from uv.
1 parent f3dbcda commit fce8e02

File tree

6 files changed

+27
-29
lines changed

6 files changed

+27
-29
lines changed

examples/caching_dependency_provider.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,18 @@ impl<DP: DependencyProvider<M = String>> DependencyProvider for CachingDependenc
3232
) -> Result<Dependencies<DP::P, DP::VS, DP::M>, DP::Err> {
3333
let mut cache = self.cached_dependencies.borrow_mut();
3434
match cache.get_dependencies(package, version) {
35-
Ok(Dependencies::Unknown(_)) => {
35+
Ok(Dependencies::Unavailable(_)) => {
3636
let dependencies = self.remote_dependencies.get_dependencies(package, version);
3737
match dependencies {
38-
Ok(Dependencies::Known(dependencies)) => {
38+
Ok(Dependencies::Available(dependencies)) => {
3939
cache.add_dependencies(
4040
package.clone(),
4141
version.clone(),
4242
dependencies.clone(),
4343
);
44-
Ok(Dependencies::Known(dependencies))
44+
Ok(Dependencies::Available(dependencies))
4545
}
46-
Ok(Dependencies::Unknown(reason)) => Ok(Dependencies::Unknown(reason)),
46+
Ok(Dependencies::Unavailable(reason)) => Ok(Dependencies::Unavailable(reason)),
4747
error @ Err(_) => error,
4848
}
4949
}

src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@
121121
//!
122122
//! The third method [get_dependencies](crate::solver::DependencyProvider::get_dependencies)
123123
//! aims at retrieving the dependencies of a given package at a given version.
124-
//! Returns [None] if dependencies are unknown.
125124
//!
126125
//! In a real scenario, these two methods may involve reading the file system
127126
//! or doing network request, so you may want to hold a cache in your
@@ -151,7 +150,7 @@
151150
//! External incompatibilities have reasons that are independent
152151
//! of the way this algorithm is implemented such as
153152
//! - dependencies: "package_a" at version 1 depends on "package_b" at version 4
154-
//! - missing dependencies: dependencies of "package_a" are unknown
153+
//! - missing dependencies: dependencies of "package_a" are unavailable
155154
//! - absence of version: there is no version of "package_a" in the range [3.1.0 4.0.0[
156155
//!
157156
//! Derived incompatibilities are obtained during the algorithm execution by deduction,

src/solver.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -149,30 +149,27 @@ pub fn resolve<DP: DependencyProvider>(
149149
}
150150
})?;
151151

152-
let known_dependencies = match dependencies {
153-
Dependencies::Unknown(reason) => {
152+
let dependencies = match dependencies {
153+
Dependencies::Unavailable(reason) => {
154154
state.add_incompatibility(Incompatibility::custom_version(
155155
p.clone(),
156156
v.clone(),
157157
reason,
158158
));
159159
continue;
160160
}
161-
Dependencies::Known(x) if x.contains_key(p) => {
161+
Dependencies::Available(x) if x.contains_key(p) => {
162162
return Err(PubGrubError::SelfDependency {
163163
package: p.clone(),
164164
version: v,
165165
});
166166
}
167-
Dependencies::Known(x) => x,
167+
Dependencies::Available(x) => x,
168168
};
169169

170170
// Add that package and version if the dependencies are not problematic.
171-
let dep_incompats = state.add_incompatibility_from_dependencies(
172-
p.clone(),
173-
v.clone(),
174-
&known_dependencies,
175-
);
171+
let dep_incompats =
172+
state.add_incompatibility_from_dependencies(p.clone(), v.clone(), &dependencies);
176173

177174
state.partial_solution.add_version(
178175
p.clone(),
@@ -194,9 +191,9 @@ pub fn resolve<DP: DependencyProvider>(
194191
#[derive(Clone)]
195192
pub enum Dependencies<P: Package, VS: VersionSet, M: Eq + Clone + Debug + Display> {
196193
/// Package dependencies are unavailable with the reason why they are missing.
197-
Unknown(M),
194+
Unavailable(M),
198195
/// Container for all available package versions.
199-
Known(DependencyConstraints<P, VS>),
196+
Available(DependencyConstraints<P, VS>),
200197
}
201198

202199
/// Trait that allows the algorithm to retrieve available packages and their dependencies.
@@ -277,7 +274,7 @@ pub trait DependencyProvider {
277274
) -> Result<Option<Self::V>, Self::Err>;
278275

279276
/// Retrieves the package dependencies.
280-
/// Return [Dependencies::Unknown] if its dependencies are unknown.
277+
/// Return [Dependencies::Unavailable] if its dependencies are unavailable.
281278
#[allow(clippy::type_complexity)]
282279
fn get_dependencies(
283280
&self,
@@ -398,8 +395,10 @@ impl<P: Package, VS: VersionSet> DependencyProvider for OfflineDependencyProvide
398395
version: &VS::V,
399396
) -> Result<Dependencies<P, VS, Self::M>, Infallible> {
400397
Ok(match self.dependencies(package, version) {
401-
None => Dependencies::Unknown("its dependencies could not be determined".to_string()),
402-
Some(dependencies) => Dependencies::Known(dependencies),
398+
None => {
399+
Dependencies::Unavailable("its dependencies could not be determined".to_string())
400+
}
401+
Some(dependencies) => Dependencies::Available(dependencies),
403402
})
404403
}
405404
}

src/type_aliases.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub type SelectedDependencies<DP> =
1717

1818
/// Holds information about all possible versions a given package can accept.
1919
/// There is a difference in semantics between an empty map
20-
/// inside [DependencyConstraints] and [Dependencies::Unknown](crate::solver::Dependencies::Unknown):
20+
/// inside [DependencyConstraints] and [Dependencies::Unavailable](crate::solver::Dependencies::Unavailable):
2121
/// the former means the package has no dependency and it is a known fact,
2222
/// while the latter means they could not be fetched by the [DependencyProvider].
2323
pub type DependencyConstraints<P, VS> = Map<P, VS>;

tests/proptest.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,8 @@ fn retain_versions<N: Package + Ord, VS: VersionSet>(
322322
continue;
323323
}
324324
let deps = match dependency_provider.get_dependencies(n, v).unwrap() {
325-
Dependencies::Unknown(_) => panic!(),
326-
Dependencies::Known(deps) => deps,
325+
Dependencies::Unavailable(_) => panic!(),
326+
Dependencies::Available(deps) => deps,
327327
};
328328
smaller_dependency_provider.add_dependencies(n.clone(), v.clone(), deps)
329329
}
@@ -346,8 +346,8 @@ fn retain_dependencies<N: Package + Ord, VS: VersionSet>(
346346
for n in dependency_provider.packages() {
347347
for v in dependency_provider.versions(n).unwrap() {
348348
let deps = match dependency_provider.get_dependencies(n, v).unwrap() {
349-
Dependencies::Unknown(_) => panic!(),
350-
Dependencies::Known(deps) => deps,
349+
Dependencies::Unavailable(_) => panic!(),
350+
Dependencies::Available(deps) => deps,
351351
};
352352
smaller_dependency_provider.add_dependencies(
353353
n.clone(),
@@ -517,8 +517,8 @@ proptest! {
517517
.get_dependencies(package, version)
518518
.unwrap()
519519
{
520-
Dependencies::Unknown(_) => panic!(),
521-
Dependencies::Known(d) => d.into_iter().collect(),
520+
Dependencies::Unavailable(_) => panic!(),
521+
Dependencies::Available(d) => d.into_iter().collect(),
522522
};
523523
if !dependencies.is_empty() {
524524
to_remove.insert((package, **version, dep_idx.get(&dependencies).0));

tests/sat_dependency_provider.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ impl<P: Package, VS: VersionSet> SatResolve<P, VS> {
6666
// active packages need each of there `deps` to be satisfied
6767
for (p, v, var) in &all_versions {
6868
let deps = match dp.get_dependencies(p, v).unwrap() {
69-
Dependencies::Unknown(_) => panic!(),
70-
Dependencies::Known(d) => d,
69+
Dependencies::Unavailable(_) => panic!(),
70+
Dependencies::Available(d) => d,
7171
};
7272
for (p1, range) in &deps {
7373
let empty_vec = vec![];

0 commit comments

Comments
 (0)