Skip to content

Commit 9e18941

Browse files
committed
refactor(lockfile): Pull out alternatives logic
1 parent 93c4446 commit 9e18941

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

src/cargo/ops/cargo_generate_lockfile.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,7 @@ fn print_lockfile_update(
189189
&& candidate.minor == current.minor
190190
&& candidate.patch == current.patch))
191191
}
192-
let possibilities = if let Some(query) = [diff.added.iter(), diff.unchanged.iter()]
193-
.into_iter()
194-
.flatten()
195-
.next()
196-
.filter(|s| s.source_id().is_registry())
197-
{
198-
let query =
199-
crate::core::dependency::Dependency::parse(query.name(), None, query.source_id())?;
192+
let possibilities = if let Some(query) = diff.alternatives_query() {
200193
loop {
201194
match registry.query_vec(&query, QueryKind::Exact) {
202195
std::task::Poll::Ready(res) => {
@@ -320,6 +313,7 @@ fn fill_with_deps<'a>(
320313
}
321314
}
322315

316+
/// All resolved versions of a package name within a [`SourceId`]
323317
#[derive(Default, Clone, Debug)]
324318
pub struct PackageDiff {
325319
removed: Vec<PackageId>,
@@ -405,4 +399,25 @@ impl PackageDiff {
405399

406400
changes.into_iter().map(|(_, v)| v).collect()
407401
}
402+
403+
/// For querying [`PackageRegistry`] for alternative versions to report to the user
404+
pub fn alternatives_query(&self) -> Option<crate::core::dependency::Dependency> {
405+
let package_id = [
406+
self.added.iter(),
407+
self.unchanged.iter(),
408+
self.removed.iter(),
409+
]
410+
.into_iter()
411+
.flatten()
412+
.next()
413+
// Limit to registry as that is the only source with meaningful alternative versions
414+
.filter(|s| s.source_id().is_registry())?;
415+
let query = crate::core::dependency::Dependency::parse(
416+
package_id.name(),
417+
None,
418+
package_id.source_id(),
419+
)
420+
.expect("already a valid dependency");
421+
Some(query)
422+
}
408423
}

0 commit comments

Comments
 (0)