Skip to content

Commit b1a30b7

Browse files
FranciscoTGouveiarami3l
authored andcommitted
feat(process): create a ProgressDrawTarget (for indicatif) inside the Process
1 parent baf16d6 commit b1a30b7

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

src/cli/rustup_mode.rs

Lines changed: 2 additions & 10 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,7 +797,6 @@ 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()?;
@@ -806,14 +805,7 @@ async fn check_updates(cfg: &Cfg<'_>, opts: CheckOpts) -> Result<utils::ExitCode
806805
// See: https://github.com/rust-lang/futures-rs/pull/1194#discussion_r209501774
807806
if num_channels > 0 {
808807
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-
});
808+
MultiProgress::with_draw_target(cfg.process.progress_draw_target());
817809
let channels = tokio_stream::iter(channels.into_iter()).map(|(name, distributable)| {
818810
let pb = multi_progress_bars.add(ProgressBar::new(1));
819811
pb.set_style(

src/process.rs

Lines changed: 16 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,21 @@ 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+
#[cfg(feature = "test")]
160+
Process::TestProcess(_) => return ProgressDrawTarget::hidden(),
161+
}
162+
let t = self.stdout().terminal(self);
163+
match self.var("RUSTUP_TERM_PROGRESS_WHEN") {
164+
Ok(s) if s.eq_ignore_ascii_case("always") => ProgressDrawTarget::term_like(Box::new(t)),
165+
Ok(s) if s.eq_ignore_ascii_case("never") => ProgressDrawTarget::hidden(),
166+
_ if t.is_a_tty() => ProgressDrawTarget::term_like(Box::new(t)),
167+
_ => ProgressDrawTarget::hidden(),
168+
}
169+
}
154170
}
155171

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

0 commit comments

Comments
 (0)