Show all PyPy versions in `uv python list --all-versions` (#6917)

## Summary

Closes https://github.com/astral-sh/uv/issues/6905.
This commit is contained in:
Charlie Marsh 2024-09-03 11:40:27 -04:00 committed by GitHub
parent b7795024a8
commit becdd4bdaf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 22 additions and 8 deletions

View File

@ -1,9 +1,9 @@
use std::collections::{BTreeSet, HashSet};
use std::collections::BTreeSet;
use std::fmt::Write;
use anyhow::Result;
use owo_colors::OwoColorize;
use rustc_hash::FxHashSet;
use uv_cache::Cache;
use uv_fs::Simplified;
use uv_python::downloads::PythonDownloadRequest;
@ -102,9 +102,9 @@ pub(crate) async fn list(
));
}
let mut seen_minor = HashSet::new();
let mut seen_patch = HashSet::new();
let mut seen_paths = HashSet::new();
let mut seen_minor = FxHashSet::default();
let mut seen_patch = FxHashSet::default();
let mut seen_paths = FxHashSet::default();
let mut include = Vec::new();
for (version, os, key, kind, path) in output.iter().rev() {
// Do not show the same path more than once
@ -117,15 +117,29 @@ pub(crate) async fn list(
// Only show the latest patch version for each download unless all were requested
if !matches!(kind, Kind::System) {
if let [major, minor, ..] = version.release() {
if !seen_minor.insert((os.clone(), *major, *minor, *key.arch(), *key.libc())) {
if !seen_minor.insert((
os.clone(),
*major,
*minor,
key.implementation(),
*key.arch(),
*key.libc(),
)) {
if matches!(kind, Kind::Download) && !all_versions {
continue;
}
}
}
if let [major, minor, patch] = version.release() {
if !seen_patch.insert((os.clone(), *major, *minor, *patch, *key.arch(), key.libc()))
{
if !seen_patch.insert((
os.clone(),
*major,
*minor,
*patch,
key.implementation(),
*key.arch(),
key.libc(),
)) {
if matches!(kind, Kind::Download) {
continue;
}