summaryrefslogtreecommitdiff
path: root/Debian
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2019-07-17 13:28:06 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2019-07-17 13:33:01 +0100
commit5cecc26a9bb8f6478443fad2909ed0a3203a719d (patch)
tree689a90493696ec6b8672d1504eba8792a35f585d /Debian
parentfdccbe592d6095c1f77fb25714e163c07ddd5342 (diff)
Dgit.pm: printcmd: Print in one go
Sometimes this message is used to report failure of `git fetch' etc. But when such operations fail, they may interleave output from the remote git, which typically prints fatal: The remote end hung up unexpectedly (referring to the local end as the `remote' end, from its point of view), after the the local end printed its message and failed. This sets up a race between Dgit.pm's printcmd and the message from the remote. If we're really unlucky, the remote's message interrupts the output from printcmd. We can avoid the within-line interleaving - at least, the interruption of our message - by printing the whole message in one go, so do that. (Strictly, the approach we use here only ensures that the message appears in a single write(2) call if it fits in the stdio buffer.) One of our test cases (tagupl) depends on this message not being split and has a small chance of failing without this fix. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'Debian')
-rw-r--r--Debian/Dgit.pm4
1 files changed, 1 insertions, 3 deletions
diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm
index 9c1a08e..d99e520 100644
--- a/Debian/Dgit.pm
+++ b/Debian/Dgit.pm
@@ -219,9 +219,7 @@ sub shellquote {
sub printcmd {
my $fh = shift @_;
my $intro = shift @_;
- print $fh $intro," " or confess "$!";
- print $fh shellquote @_ or confess "$!";
- print $fh "\n" or confess "$!";
+ print $fh $intro." ".(join '', shellquote @_)."\n" or confess "$!";
}
sub debugcmd {