summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2018-02-14 13:30:52 +0100
committerSergei Golubchik <serg@mariadb.org>2018-02-21 17:48:25 +0100
commit5d8ac1ece1687278cbc860e97eae9c7cc163ee73 (patch)
treecf9077ec48ba781f0af4514983f7f34c4b585b5c
parent50359719f0dd1f8f6d3d256a0db107654f8d39f1 (diff)
downloadmariadb-git-5d8ac1ece1687278cbc860e97eae9c7cc163ee73.tar.gz
log all mtr output in vardir/log/stdout.log
despite the name, it logs both stdout and stderr
-rw-r--r--mysql-test/lib/My/SafeProcess/Base.pm12
-rw-r--r--mysql-test/lib/My/Tee.pm23
-rwxr-xr-xmysql-test/mysql-test-run.pl9
3 files changed, 39 insertions, 5 deletions
diff --git a/mysql-test/lib/My/SafeProcess/Base.pm b/mysql-test/lib/My/SafeProcess/Base.pm
index 1ac0120a735..c5ac2ab51c2 100644
--- a/mysql-test/lib/My/SafeProcess/Base.pm
+++ b/mysql-test/lib/My/SafeProcess/Base.pm
@@ -186,8 +186,10 @@ sub create_process {
# it and any childs(that hasn't changed group themself)
setpgrp(0,0) if $opts{setpgrp};
- if ( $output and !open(STDOUT, $open_mode, $output) ) {
- croak("can't redirect STDOUT to '$output': $!");
+ if ( $output ) {
+ close STDOUT;
+ open(STDOUT, $open_mode, $output)
+ or croak "can't redirect STDOUT to '$output': $!";
}
if ( $error ) {
@@ -196,8 +198,10 @@ sub create_process {
croak("can't dup STDOUT: $!");
}
}
- elsif ( ! open(STDERR, $open_mode, $error) ) {
- croak("can't redirect STDERR to '$error': $!");
+ else {
+ close STDERR;
+ open(STDERR, $open_mode, $error)
+ or croak "can't redirect STDERR to '$error': $!";
}
}
diff --git a/mysql-test/lib/My/Tee.pm b/mysql-test/lib/My/Tee.pm
new file mode 100644
index 00000000000..ee82e6f45ae
--- /dev/null
+++ b/mysql-test/lib/My/Tee.pm
@@ -0,0 +1,23 @@
+package My::Tee;
+
+# see PerlIO::via
+
+our $copyfh;
+
+sub PUSHED
+{
+ open($copyfh, '>', "$::opt_vardir/log/stdout.log")
+ or die "open(>$::opt_vardir/log/stdout.log): $!"
+ unless $copyfh;
+ bless { }, shift;
+}
+
+sub WRITE
+{
+ my ($obj, $buf, $fh) = @_;
+ print $fh $buf;
+ print $copyfh $buf;
+ return length($buf);
+}
+
+1;
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index eaec51b82b4..2581eb7b503 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -91,6 +91,7 @@ use My::Platform;
use My::SafeProcess;
use My::ConfigFactory;
use My::Options;
+use My::Tee;
use My::Find;
use My::SysInfo;
use My::CoreDump;
@@ -392,6 +393,11 @@ sub main {
initialize_servers();
init_timers();
+ unless (IS_WINDOWS) {
+ binmode(STDOUT,":via(My::Tee)") or die "binmode(STDOUT, :via(My::Tee)):$!";
+ binmode(STDERR,":via(My::Tee)") or die "binmode(STDERR, :via(My::Tee)):$!";
+ }
+
mtr_report("Checking supported features...");
executable_setup();
@@ -6280,7 +6286,8 @@ sub xterm_stat {
my $done = $num_tests - $left;
my $spent = time - $^T;
- printf "\e];mtr: spent %s on %d tests. %s (%d tests) left\a",
+ syswrite STDOUT, sprintf
+ "\e];mtr: spent %s on %d tests. %s (%d tests) left\a",
time_format($spent), $done,
time_format($spent/$done * $left), $left;
}