From 6a4866715272f73dffa1c6295e2d77f19128f6ff Mon Sep 17 00:00:00 2001 From: Lucas Nogueira Date: Wed, 10 Apr 2024 09:15:44 -0300 Subject: [PATCH] feat(packager): always show command output, enhance formatting --- .changes/enhance-shell-output.md | 5 ++++ crates/packager/src/cli/mod.rs | 3 +++ crates/packager/src/lib.rs | 46 ++++++++++++++++++++++++++++++++ crates/packager/src/shell.rs | 12 +++++++-- 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 .changes/enhance-shell-output.md diff --git a/.changes/enhance-shell-output.md b/.changes/enhance-shell-output.md new file mode 100644 index 00000000..429b5e2f --- /dev/null +++ b/.changes/enhance-shell-output.md @@ -0,0 +1,5 @@ +--- +"cargo-packager": patch +--- + +Always show command output and enhance formatting. diff --git a/crates/packager/src/cli/mod.rs b/crates/packager/src/cli/mod.rs index 2a925a1c..07581e42 100644 --- a/crates/packager/src/cli/mod.rs +++ b/crates/packager/src/cli/mod.rs @@ -267,6 +267,9 @@ where if !cli.quite { init_tracing_subscriber(cli.verbose); + if std::env::var_os("CARGO_TERM_COLOR").is_none() { + std::env::set_var("CARGO_TERM_COLOR", "always"); + } } run_cli(cli) diff --git a/crates/packager/src/lib.rs b/crates/packager/src/lib.rs index 24d613d6..e2dda339 100644 --- a/crates/packager/src/lib.rs +++ b/crates/packager/src/lib.rs @@ -126,9 +126,55 @@ pub fn init_tracing_subscriber(verbosity: u8) { .with_line_number(tracing) .with_file(tracing) .with_max_level(level) + .event_format(TracingFormatter { + formatter: tracing_subscriber::fmt::format().compact(), + }) .init(); } +struct TracingFormatter { + formatter: tracing_subscriber::fmt::format::Format, +} + +struct ShellFieldVisitor { + message: String, +} + +impl tracing::field::Visit for ShellFieldVisitor { + fn record_str(&mut self, field: &tracing::field::Field, value: &str) { + if field.name() == "message" { + self.message = value.to_string(); + } + } + + fn record_debug(&mut self, field: &tracing::field::Field, value: &dyn std::fmt::Debug) { + if field.name() == "message" { + self.message = format!("{value:?}"); + } + } +} + +impl tracing_subscriber::fmt::FormatEvent for TracingFormatter +where + S: tracing::Subscriber + for<'a> tracing_subscriber::registry::LookupSpan<'a>, + N: for<'a> tracing_subscriber::fmt::FormatFields<'a> + 'static, +{ + fn format_event( + &self, + ctx: &tracing_subscriber::fmt::FmtContext<'_, S, N>, + mut writer: tracing_subscriber::fmt::format::Writer<'_>, + event: &tracing::Event<'_>, + ) -> std::fmt::Result { + if event.fields().any(|f| f.name() == "shell") { + let mut visitor = ShellFieldVisitor { message: "".into() }; + event.record(&mut visitor); + writeln!(writer, "{}", visitor.message) + } else { + self.formatter.format_event(ctx, writer, event) + } + } +} + /// Sign the specified packages and return the signatures paths. /// /// If `packages` contain a directory in the case of [`PackageFormat::App`] diff --git a/crates/packager/src/shell.rs b/crates/packager/src/shell.rs index 3fc3668f..79e2acd2 100644 --- a/crates/packager/src/shell.rs +++ b/crates/packager/src/shell.rs @@ -43,7 +43,11 @@ impl CommandExt for Command { if let Ok(0) = stdout.read_until(b'\n', &mut buf) { break; } - tracing::debug!("{}", String::from_utf8_lossy(&buf[..buf.len() - 1])); + tracing::info!( + shell = "stdout", + "{}", + String::from_utf8_lossy(&buf[..buf.len() - 1]) + ); lines.extend(&buf); } }); @@ -59,7 +63,11 @@ impl CommandExt for Command { if let Ok(0) = stderr.read_until(b'\n', &mut buf) { break; } - tracing::debug!("{}", String::from_utf8_lossy(&buf[..buf.len() - 1])); + tracing::info!( + shell = "stderr", + "{}", + String::from_utf8_lossy(&buf[..buf.len() - 1]) + ); lines.extend(&buf); } });