Concurrent progress bars (#3252)

## Summary

Implements concurrent progress bars. Resolves
https://github.com/astral-sh/uv/issues/1209.

## Test Plan

b21bdfbb-8817-4873-a65c-16c9e8c7c460
This commit is contained in:
Ibraheem Ahmed 2024-05-26 21:21:07 -04:00 committed by GitHub
parent 70cbc32565
commit 7dc322665c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 477 additions and 230 deletions

View file

@ -20,11 +20,21 @@ pub trait Reporter: Send + Sync {
/// Callback to invoke when a source distribution build is complete.
fn on_build_complete(&self, source: &BuildableSource, id: usize);
/// Callback to invoke when a download is kicked off.
fn on_download_start(&self, name: &PackageName, size: Option<u64>) -> usize;
/// Callback to invoke when a download makes progress (i.e. some number of bytes are
/// downloaded).
fn on_download_progress(&self, id: usize, bytes: u64);
/// Callback to invoke when a download is complete.
fn on_download_complete(&self, name: &PackageName, id: usize);
/// Callback to invoke when a repository checkout begins.
fn on_checkout_start(&self, url: &Url, rev: &str) -> usize;
/// Callback to invoke when a repository checkout completes.
fn on_checkout_complete(&self, url: &Url, rev: &str, index: usize);
fn on_checkout_complete(&self, url: &Url, rev: &str, id: usize);
}
/// A facade for converting from [`Reporter`] to [`uv_distribution::Reporter`].
@ -45,7 +55,19 @@ impl uv_distribution::Reporter for Facade {
self.reporter.on_checkout_start(url, rev)
}
fn on_checkout_complete(&self, url: &Url, rev: &str, index: usize) {
self.reporter.on_checkout_complete(url, rev, index);
fn on_checkout_complete(&self, url: &Url, rev: &str, id: usize) {
self.reporter.on_checkout_complete(url, rev, id);
}
fn on_download_start(&self, name: &PackageName, size: Option<u64>) -> usize {
self.reporter.on_download_start(name, size)
}
fn on_download_progress(&self, id: usize, bytes: u64) {
self.reporter.on_download_progress(id, bytes);
}
fn on_download_complete(&self, name: &PackageName, id: usize) {
self.reporter.on_download_complete(name, id);
}
}