From 59c9bd08000b72e01b1a4506edc9954183e886a0 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 7 Aug 2024 14:01:16 +0200 Subject: chore(progress): handle position greater than total size (#24924) --- cli/util/progress_bar/mod.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'cli') diff --git a/cli/util/progress_bar/mod.rs b/cli/util/progress_bar/mod.rs index abafa2164..6d247818d 100644 --- a/cli/util/progress_bar/mod.rs +++ b/cli/util/progress_bar/mod.rs @@ -44,7 +44,7 @@ impl ProgressMessagePrompt { #[derive(Debug)] pub struct UpdateGuard { - maybe_entry: Option, + maybe_entry: Option>, } impl Drop for UpdateGuard { @@ -75,13 +75,13 @@ pub enum ProgressBarStyle { TextOnly, } -#[derive(Clone, Debug)] +#[derive(Debug)] struct ProgressBarEntry { id: usize, prompt: ProgressMessagePrompt, pub message: String, - pos: Arc, - total_size: Arc, + pos: AtomicU64, + total_size: AtomicU64, progress_bar: ProgressBarInner, } @@ -111,6 +111,8 @@ impl ProgressBarEntry { let total_size = self.total_size.load(Ordering::Relaxed) as f64; if total_size == 0f64 { 0f64 + } else if pos > total_size { + 1f64 } else { pos / total_size } @@ -125,7 +127,7 @@ struct InternalState { start_time: Instant, keep_alive_count: usize, total_entries: usize, - entries: Vec, + entries: Vec>, } #[derive(Clone, Debug)] @@ -152,17 +154,17 @@ impl ProgressBarInner { &self, kind: ProgressMessagePrompt, message: String, - ) -> ProgressBarEntry { + ) -> Arc { let mut internal_state = self.state.lock(); let id = internal_state.total_entries; - let entry = ProgressBarEntry { + let entry = Arc::new(ProgressBarEntry { id, prompt: kind, message, pos: Default::default(), total_size: Default::default(), progress_bar: self.clone(), - }; + }); internal_state.entries.push(entry.clone()); internal_state.total_entries += 1; internal_state.keep_alive_count += 1; -- cgit v1.2.3