feat: progress bar or println (#2489)
This commit is contained in:
1 parent
e4764f2bba
commit
d6fc5dc5bd
1 file changed
+51
-14
+51
-14
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user