From 232022ff176bc77d19137ba7b3a40b73b403df9b Mon Sep 17 00:00:00 2001 From: Jeremy Fitzhardinge Date: Tue, 10 Dec 2019 23:32:52 -0800 Subject: [PATCH 1/2] Fix up Command Debug output when arg0 is specified. PR https://github.com/rust-lang/rust/pull/66512 added the ability to set argv[0] on Command. As a side effect, it changed the Debug output to print both the program and argv[0], which in practice results in stuttery output ("echo echo foo"). This PR reverts the behaviour to the the old one, so that the command is only printed once - unless arg0 has been set. In that case it emits "[command] arg0 arg1 ...". --- src/libstd/sys/unix/process/process_common.rs | 8 +++++-- src/test/ui/command-argv0-debug.rs | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/test/ui/command-argv0-debug.rs diff --git a/src/libstd/sys/unix/process/process_common.rs b/src/libstd/sys/unix/process/process_common.rs index c9109b0c9d4..e66d6fdc56a 100644 --- a/src/libstd/sys/unix/process/process_common.rs +++ b/src/libstd/sys/unix/process/process_common.rs @@ -375,8 +375,12 @@ impl ChildStdio { impl fmt::Debug for Command { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{:?}", self.program)?; - for arg in &self.args { + if self.program != self.args[0] { + write!(f, "[{:?}] ", self.program)?; + } + write!(f, "{:?}", self.args[0])?; + + for arg in &self.args[1..] { write!(f, " {:?}", arg)?; } Ok(()) diff --git a/src/test/ui/command-argv0-debug.rs b/src/test/ui/command-argv0-debug.rs new file mode 100644 index 00000000000..133d2ada2b2 --- /dev/null +++ b/src/test/ui/command-argv0-debug.rs @@ -0,0 +1,24 @@ +// run-pass + +// ignore-windows - this is a unix-specific test +// ignore-cloudabi no processes +// ignore-emscripten no processes +// ignore-sgx no processes +#![feature(process_set_argv0)] + +use std::os::unix::process::CommandExt; +use std::process::Command; + +fn main() { + let mut command = Command::new("some-boring-name"); + + assert_eq!(format!("{:?}", command), r#""some-boring-name""#); + + command.args(&["1", "2", "3"]); + + assert_eq!(format!("{:?}", command), r#""some-boring-name" "1" "2" "3""#); + + command.arg0("exciting-name"); + + assert_eq!(format!("{:?}", command), r#"["some-boring-name"] "exciting-name" "1" "2" "3""#); +} From ce56e7528359b9581cac0b59080d25468d60de20 Mon Sep 17 00:00:00 2001 From: Jeremy Fitzhardinge Date: Wed, 11 Dec 2019 21:39:57 -0800 Subject: [PATCH 2/2] Move command-related tests into command/ --- src/test/ui/{ => command}/command-argv0-debug.rs | 0 src/test/ui/{ => command}/command-argv0.rs | 0 src/test/ui/{ => command}/command-exec.rs | 0 src/test/ui/{ => command}/command-pre-exec.rs | 0 src/test/ui/{ => command}/command-uid-gid.rs | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename src/test/ui/{ => command}/command-argv0-debug.rs (100%) rename src/test/ui/{ => command}/command-argv0.rs (100%) rename src/test/ui/{ => command}/command-exec.rs (100%) rename src/test/ui/{ => command}/command-pre-exec.rs (100%) rename src/test/ui/{ => command}/command-uid-gid.rs (100%) diff --git a/src/test/ui/command-argv0-debug.rs b/src/test/ui/command/command-argv0-debug.rs similarity index 100% rename from src/test/ui/command-argv0-debug.rs rename to src/test/ui/command/command-argv0-debug.rs diff --git a/src/test/ui/command-argv0.rs b/src/test/ui/command/command-argv0.rs similarity index 100% rename from src/test/ui/command-argv0.rs rename to src/test/ui/command/command-argv0.rs diff --git a/src/test/ui/command-exec.rs b/src/test/ui/command/command-exec.rs similarity index 100% rename from src/test/ui/command-exec.rs rename to src/test/ui/command/command-exec.rs diff --git a/src/test/ui/command-pre-exec.rs b/src/test/ui/command/command-pre-exec.rs similarity index 100% rename from src/test/ui/command-pre-exec.rs rename to src/test/ui/command/command-pre-exec.rs diff --git a/src/test/ui/command-uid-gid.rs b/src/test/ui/command/command-uid-gid.rs similarity index 100% rename from src/test/ui/command-uid-gid.rs rename to src/test/ui/command/command-uid-gid.rs