feat: progress bar or println (#2489)

This commit is contained in:
Miles Murgaw authored and GitHub committed 2024-06-07 17:29:55 -07:00
1 parent e4764f2bba
commit d6fc5dc5bd
1 file changed
+51 -14
+51 -14
View File
@@ -15,7 +15,7 @@ use manganis_cli_support::{AssetManifest, ManganisSupportGuard};
use std::{
env,
fs::{copy, create_dir_all, File},
io::Read,
io::{self, IsTerminal, Read},
panic,
path::PathBuf,
process::Command,
@@ -437,18 +437,56 @@ struct CargoBuildResult {
output_location: Option<PathBuf>,
}
struct Outputter {
progress_bar: Option<ProgressBar>,
}
impl Outputter {
pub fn new() -> Self {
let stdout = io::stdout().lock();
let mut myself = Self { progress_bar: None };
if stdout.is_terminal() {
let mut pb = ProgressBar::new_spinner();
pb.enable_steady_tick(Duration::from_millis(200));
pb = PROGRESS_BARS.add(pb);
pb.set_style(
ProgressStyle::with_template("{spinner:.dim.bold} {wide_msg}")
.unwrap()
.tick_chars("/|\\- "),
);
myself.progress_bar = Some(pb);
}
myself
}
pub fn println(&self, msg: impl ToString) {
let msg = msg.to_string();
if let Some(pb) = &self.progress_bar {
pb.set_message(msg)
} else {
println!("{msg}");
}
}
pub fn finish_with_message(&self, msg: impl ToString) {
let msg = msg.to_string();
if let Some(pb) = &self.progress_bar {
pb.finish_with_message(msg)
} else {
println!("{msg}");
}
}
}
fn prettier_build(cmd: subprocess::Exec) -> anyhow::Result<CargoBuildResult> {
let mut warning_messages: Vec<Diagnostic> = vec![];
let mut pb = ProgressBar::new_spinner();
pb.enable_steady_tick(Duration::from_millis(200));
pb = PROGRESS_BARS.add(pb);
pb.set_style(
ProgressStyle::with_template("{spinner:.dim.bold} {wide_msg}")
.unwrap()
.tick_chars("/|\\- "),
);
pb.set_message("💼 Waiting to start building the project...");
let output = Outputter::new();
output.println("💼 Waiting to start building the project...");
let stdout = cmd.detached().stream_stdout()?;
let reader = std::io::BufReader::new(stdout);
@@ -473,8 +511,7 @@ fn prettier_build(cmd: subprocess::Exec) -> anyhow::Result<CargoBuildResult> {
}
}
Message::CompilerArtifact(artifact) => {
pb.set_message(format!("⚙ Compiling {} ", artifact.package_id));
pb.tick();
output.println(format!("⚙ Compiling {} ", artifact.package_id));
if let Some(executable) = artifact.executable {
output_location = Some(executable.into());
}
@@ -484,9 +521,9 @@ fn prettier_build(cmd: subprocess::Exec) -> anyhow::Result<CargoBuildResult> {
}
Message::BuildFinished(finished) => {
if finished.success {
pb.finish_with_message("👑 Build done.");
output.finish_with_message("👑 Build done.");
} else {
pb.finish_with_message("❌ Build failed.");
output.finish_with_message("❌ Build failed.");
return Err(anyhow::anyhow!("Build failed"));
}
}