mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 13:25:00 +00:00
Add progress bar
This commit is contained in:
parent
8032d4606e
commit
7f497fa43f
5 changed files with 13 additions and 4 deletions
|
@ -24,3 +24,4 @@ pep440_rs = "0.3.12"
|
||||||
tracing = "0.1.37"
|
tracing = "0.1.37"
|
||||||
tracing-tree = "0.2.5"
|
tracing-tree = "0.2.5"
|
||||||
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
|
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
|
||||||
|
indicatif = "0.17.7"
|
||||||
|
|
|
@ -13,14 +13,16 @@ use puffin_client::{File, PypiClientBuilder, SimpleJson};
|
||||||
use puffin_requirements::metadata::Metadata21;
|
use puffin_requirements::metadata::Metadata21;
|
||||||
use puffin_requirements::package_name::PackageName;
|
use puffin_requirements::package_name::PackageName;
|
||||||
use puffin_requirements::wheel::WheelName;
|
use puffin_requirements::wheel::WheelName;
|
||||||
|
use indicatif::{ProgressBar, ProgressStyle};
|
||||||
use crate::commands::ExitStatus;
|
use crate::commands::ExitStatus;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
enum Request {
|
enum Request {
|
||||||
Package(Requirement),
|
Package(Requirement),
|
||||||
Version(Requirement, File),
|
Version(Requirement, File),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
enum Response {
|
enum Response {
|
||||||
Package(SimpleJson, Requirement),
|
Package(SimpleJson, Requirement),
|
||||||
Version(Metadata21, Requirement),
|
Version(Metadata21, Requirement),
|
||||||
|
@ -66,7 +68,7 @@ pub(crate) async fn install(src: &Path) -> Result<ExitStatus> {
|
||||||
),
|
),
|
||||||
Request::Version(requirement, file) => Either::Right(
|
Request::Version(requirement, file) => Either::Right(
|
||||||
proxy_client
|
proxy_client
|
||||||
.file(file.clone())
|
.file(file)
|
||||||
.map_ok(move |metadata| Response::Version(metadata, requirement)),
|
.map_ok(move |metadata| Response::Version(metadata, requirement)),
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
|
@ -84,6 +86,10 @@ pub(crate) async fn install(src: &Path) -> Result<ExitStatus> {
|
||||||
// Resolve the requirements.
|
// Resolve the requirements.
|
||||||
let mut resolution: HashMap<PackageName, Version> = HashMap::with_capacity(requirements.len());
|
let mut resolution: HashMap<PackageName, Version> = HashMap::with_capacity(requirements.len());
|
||||||
|
|
||||||
|
let spinner_style = ProgressStyle::with_template("{spinner} {wide_bar} [{pos}/{len}] {msg}").unwrap();
|
||||||
|
let bar = ProgressBar::new(8);
|
||||||
|
bar.set_style(spinner_style);
|
||||||
|
|
||||||
while let Some(chunk) = package_stream.next().await {
|
while let Some(chunk) = package_stream.next().await {
|
||||||
for result in chunk {
|
for result in chunk {
|
||||||
let result: Response = result?;
|
let result: Response = result?;
|
||||||
|
@ -125,6 +131,7 @@ pub(crate) async fn install(src: &Path) -> Result<ExitStatus> {
|
||||||
let normalized_name = PackageName::normalize(&requirement.name);
|
let normalized_name = PackageName::normalize(&requirement.name);
|
||||||
in_flight.remove(&normalized_name);
|
in_flight.remove(&normalized_name);
|
||||||
resolution.insert(normalized_name, metadata.version);
|
resolution.insert(normalized_name, metadata.version);
|
||||||
|
bar.inc(1);
|
||||||
|
|
||||||
// Enqueue its dependencies.
|
// Enqueue its dependencies.
|
||||||
for dependency in metadata.requires_dist {
|
for dependency in metadata.requires_dist {
|
||||||
|
|
|
@ -17,3 +17,4 @@ serde_json = { version = "1.0.107" }
|
||||||
thiserror = { version = "1.0.49" }
|
thiserror = { version = "1.0.49" }
|
||||||
url = { version = "2.4.1" }
|
url = { version = "2.4.1" }
|
||||||
tracing = "0.1.37"
|
tracing = "0.1.37"
|
||||||
|
indicatif = "0.17.7"
|
||||||
|
|
|
@ -35,7 +35,7 @@ impl PypiClient {
|
||||||
// Fetch from the registry.
|
// Fetch from the registry.
|
||||||
let text = self.simple_impl(&package_name, &url).await?;
|
let text = self.simple_impl(&package_name, &url).await?;
|
||||||
let payload = serde_json::from_str(&text)
|
let payload = serde_json::from_str(&text)
|
||||||
.map_err(move |e| PypiClientError::from_json_err(e, "".to_string()));
|
.map_err(move |e| PypiClientError::from_json_err(e, String::new()));
|
||||||
|
|
||||||
trace!("fetched metadata for {} in {:?}", url, start.elapsed());
|
trace!("fetched metadata for {} in {:?}", url, start.elapsed());
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
flask
|
black
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue