Skip to content

Commit cbbebb0

Browse files
feat(process): create a ProgressDrawTarget (for indicatif) inside the Process
1 parent 873fc49 commit cbbebb0

File tree

3 files changed

+25
-22
lines changed

3 files changed

+25
-22
lines changed

src/cli/download_tracker.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,10 @@ pub(crate) struct DownloadTracker {
2020
impl DownloadTracker {
2121
/// Creates a new DownloadTracker.
2222
pub(crate) fn new_with_display_progress(display_progress: bool, process: &Process) -> Self {
23-
let t = process.stdout().terminal(process);
24-
let is_a_tty = t.is_a_tty();
25-
let multi_progress_bars =
26-
MultiProgress::with_draw_target(match process.var("RUSTUP_TERM_PROGRESS_WHEN") {
27-
Ok(s) if s.eq_ignore_ascii_case("always") => {
28-
ProgressDrawTarget::term_like(Box::new(t))
29-
}
30-
Ok(s) if s.eq_ignore_ascii_case("never") => ProgressDrawTarget::hidden(),
31-
_ if is_a_tty && display_progress => ProgressDrawTarget::term_like(Box::new(t)),
32-
_ => ProgressDrawTarget::hidden(),
33-
});
23+
let multi_progress_bars = MultiProgress::with_draw_target(process.progress_draw_target());
24+
if !display_progress {
25+
multi_progress_bars.set_draw_target(ProgressDrawTarget::hidden());
26+
}
3427
Self {
3528
multi_progress_bars,
3629
progress_bar: ProgressBar::hidden(),

src/cli/rustup_mode.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use clap::{Args, CommandFactory, Parser, Subcommand, ValueEnum, builder::Possibl
1414
use clap_complete::Shell;
1515
use console::style;
1616
use futures_util::stream::StreamExt;
17-
use indicatif::{MultiProgress, ProgressBar, ProgressDrawTarget, ProgressStyle};
17+
use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
1818
use itertools::Itertools;
1919
use tracing::{info, trace, warn};
2020
use tracing_subscriber::{EnvFilter, Registry, reload::Handle};
@@ -797,23 +797,14 @@ async fn default_(
797797

798798
async fn check_updates(cfg: &Cfg<'_>, opts: CheckOpts) -> Result<utils::ExitCode> {
799799
let t = cfg.process.stdout().terminal(cfg.process);
800-
let is_a_tty = t.is_a_tty();
801800
let use_colors = matches!(t.color_choice(), ColorChoice::Auto | ColorChoice::Always);
802801
let mut update_available = false;
803802
let channels = cfg.list_channels()?;
804803
let num_channels = channels.len();
805804
// Ensure that `.buffered()` is never called with 0 as this will cause a hang.
806805
// See: https://github.com/rust-lang/futures-rs/pull/1194#discussion_r209501774
807806
if num_channels > 0 {
808-
let multi_progress_bars =
809-
MultiProgress::with_draw_target(match cfg.process.var("RUSTUP_TERM_PROGRESS_WHEN") {
810-
Ok(s) if s.eq_ignore_ascii_case("always") => {
811-
ProgressDrawTarget::term_like(Box::new(t))
812-
}
813-
Ok(s) if s.eq_ignore_ascii_case("never") => ProgressDrawTarget::hidden(),
814-
_ if is_a_tty => ProgressDrawTarget::term_like(Box::new(t)),
815-
_ => ProgressDrawTarget::hidden(),
816-
});
807+
let multi_progress_bars = MultiProgress::with_draw_target(cfg.process.progress_draw_target());
817808
let channels = tokio_stream::iter(channels.into_iter()).map(|(name, distributable)| {
818809
let pb = multi_progress_bars.add(ProgressBar::new(1));
819810
pb.set_style(

src/process.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use std::{
1414
use std::{env, thread};
1515

1616
use anyhow::{Context, Result, bail};
17+
use indicatif::ProgressDrawTarget;
1718
#[cfg(feature = "test")]
1819
use tracing::subscriber::DefaultGuard;
1920
#[cfg(feature = "test")]
@@ -151,6 +152,24 @@ impl Process {
151152
Process::TestProcess(p) => Ok(p.cwd.clone()),
152153
}
153154
}
155+
156+
pub fn progress_draw_target(&self) -> ProgressDrawTarget {
157+
match self {
158+
Process::OsProcess(_) => {
159+
let t = self.stdout().terminal(self);
160+
match self.var("RUSTUP_TERM_PROGRESS_WHEN") {
161+
Ok(s) if s.eq_ignore_ascii_case("always") => {
162+
ProgressDrawTarget::term_like(Box::new(t))
163+
}
164+
Ok(s) if s.eq_ignore_ascii_case("never") => ProgressDrawTarget::hidden(),
165+
_ if t.is_a_tty() => ProgressDrawTarget::term_like(Box::new(t)),
166+
_ => ProgressDrawTarget::hidden(),
167+
}
168+
}
169+
#[cfg(feature = "test")]
170+
Process::TestProcess(_) => ProgressDrawTarget::hidden(),
171+
}
172+
}
154173
}
155174

156175
impl home::env::Env for Process {

0 commit comments

Comments
 (0)