Change reporter length to Option (#16448)

## Summary

Changes the `length` parameter to `PythonDownloadReporter::new` to an
`Option<u64>` to resolve the issue of setting a single-item reporter
length.

Resolves: #15404

## Test Plan

- build test
- ran test suite
This commit is contained in:
elle 2025-10-27 16:17:14 +00:00 committed by GitHub
parent 659b4873b6
commit fe5d944afa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 14 additions and 20 deletions

View file

@ -51,14 +51,14 @@ pub(crate) fn cache_clean(
)?;
let num_paths = walkdir::WalkDir::new(cache.root()).into_iter().count();
let reporter = CleaningDirectoryReporter::new(printer, num_paths);
let reporter = CleaningDirectoryReporter::new(printer, Some(num_paths));
let root = cache.root().to_path_buf();
cache
.clear(Box::new(reporter))
.with_context(|| format!("Failed to clear cache at: {}", root.user_display()))?
} else {
let reporter = CleaningPackageReporter::new(printer, packages.len());
let reporter = CleaningPackageReporter::new(printer, Some(packages.len()));
let mut summary = Removal::default();
for package in packages {

View file

@ -407,7 +407,7 @@ pub(crate) async fn install(
// default retries to avoid the middleware from performing uncontrolled retries.
let client = client_builder.retries(0).build();
let reporter = PythonDownloadReporter::new(printer, downloads.len() as u64);
let reporter = PythonDownloadReporter::new(printer, Some(downloads.len() as u64));
let mut tasks = FuturesUnordered::new();
for download in &downloads {

View file

@ -637,16 +637,13 @@ pub(crate) struct PythonDownloadReporter {
impl PythonDownloadReporter {
/// Initialize a [`PythonDownloadReporter`] for a single Python download.
pub(crate) fn single(printer: Printer) -> Self {
Self::new(printer, 1)
Self::new(printer, None)
}
/// Initialize a [`PythonDownloadReporter`] for multiple Python downloads.
pub(crate) fn new(printer: Printer, length: u64) -> Self {
pub(crate) fn new(printer: Printer, length: Option<u64>) -> Self {
let multi_progress = MultiProgress::with_draw_target(printer.target());
let root = multi_progress.add(ProgressBar::with_draw_target(
Some(length),
printer.target(),
));
let root = multi_progress.add(ProgressBar::with_draw_target(length, printer.target()));
let reporter = ProgressReporter::new(root, multi_progress, printer);
Self { reporter }
}
@ -680,16 +677,13 @@ pub(crate) struct PublishReporter {
impl PublishReporter {
/// Initialize a [`PublishReporter`] for a single upload.
pub(crate) fn single(printer: Printer) -> Self {
Self::new(printer, 1)
Self::new(printer, None)
}
/// Initialize a [`PublishReporter`] for multiple uploads.
pub(crate) fn new(printer: Printer, length: u64) -> Self {
pub(crate) fn new(printer: Printer, length: Option<u64>) -> Self {
let multi_progress = MultiProgress::with_draw_target(printer.target());
let root = multi_progress.add(ProgressBar::with_draw_target(
Some(length),
printer.target(),
));
let root = multi_progress.add(ProgressBar::with_draw_target(length, printer.target()));
let reporter = ProgressReporter::new(root, multi_progress, printer);
Self { reporter }
}
@ -758,8 +752,8 @@ pub(crate) struct CleaningDirectoryReporter {
impl CleaningDirectoryReporter {
/// Initialize a [`CleaningDirectoryReporter`] for cleaning the cache directory.
pub(crate) fn new(printer: Printer, max: usize) -> Self {
let bar = ProgressBar::with_draw_target(Some(max as u64), printer.target());
pub(crate) fn new(printer: Printer, max: Option<usize>) -> Self {
let bar = ProgressBar::with_draw_target(max.map(|m| m as u64), printer.target());
bar.set_style(
ProgressStyle::with_template("{prefix} [{bar:20}] {percent}%")
.unwrap()
@ -787,8 +781,8 @@ pub(crate) struct CleaningPackageReporter {
impl CleaningPackageReporter {
/// Initialize a [`CleaningPackageReporter`] for cleaning packages from the cache.
pub(crate) fn new(printer: Printer, max: usize) -> Self {
let bar = ProgressBar::with_draw_target(Some(max as u64), printer.target());
pub(crate) fn new(printer: Printer, max: Option<usize>) -> Self {
let bar = ProgressBar::with_draw_target(max.map(|m| m as u64), printer.target());
bar.set_style(
ProgressStyle::with_template("{prefix} [{bar:20}] {pos}/{len}{msg}")
.unwrap()
@ -841,7 +835,7 @@ impl BinaryDownloadReporter {
/// Initialize a [`BinaryDownloadReporter`] for a single binary download.
pub(crate) fn single(printer: Printer) -> Self {
let multi_progress = MultiProgress::with_draw_target(printer.target());
let root = multi_progress.add(ProgressBar::with_draw_target(Some(1), printer.target()));
let root = multi_progress.add(ProgressBar::with_draw_target(None, printer.target()));
let reporter = ProgressReporter::new(root, multi_progress, printer);
Self { reporter }
}