diff options
Diffstat (limited to 'mysql-test/lib/mtr_io.pl')
-rw-r--r-- | mysql-test/lib/mtr_io.pl | 164 |
1 files changed, 28 insertions, 136 deletions
diff --git a/mysql-test/lib/mtr_io.pl b/mysql-test/lib/mtr_io.pl index aa671c0f4f7..21581798ddc 100644 --- a/mysql-test/lib/mtr_io.pl +++ b/mysql-test/lib/mtr_io.pl @@ -19,135 +19,15 @@ # same name. use strict; +use Carp; -sub mtr_get_pid_from_file ($); -sub mtr_get_opts_from_file ($); sub mtr_fromfile ($); sub mtr_tofile ($@); sub mtr_tonewfile($@); -sub mtr_lastlinefromfile($); sub mtr_appendfile_to_file ($$); sub mtr_grab_file($); - - -############################################################################## -# -# -# -############################################################################## - -sub mtr_get_pid_from_file ($) { - my $pid_file_path= shift; - my $TOTAL_ATTEMPTS= 30; - my $timeout= 1; - - # We should read from the file until we get correct pid. As it is - # stated in BUG#21884, pid file can be empty at some moment. So, we should - # read it until we get valid data. - - for (my $cur_attempt= 1; $cur_attempt <= $TOTAL_ATTEMPTS; ++$cur_attempt) - { - mtr_debug("Reading pid file '$pid_file_path' " . - "($cur_attempt of $TOTAL_ATTEMPTS)..."); - - open(FILE, '<', $pid_file_path) - or mtr_error("can't open file \"$pid_file_path\": $!"); - - # Read pid number from file - my $pid= <FILE>; - chomp $pid; - close FILE; - - return $pid if $pid=~ /^(\d+)/; - - mtr_debug("Pid file '$pid_file_path' does not yet contain pid number.\n" . - "Sleeping $timeout second(s) more..."); - - sleep($timeout); - } - - mtr_error("Pid file '$pid_file_path' is corrupted. " . - "Can not retrieve PID in " . - ($timeout * $TOTAL_ATTEMPTS) . " seconds."); -} - -sub mtr_get_opts_from_file ($) { - my $file= shift; - - open(FILE,"<",$file) or mtr_error("can't open file \"$file\": $!"); - my @args; - while ( <FILE> ) - { - chomp; - - # --set-variable=init_connect=set @a='a\\0c' - s/^\s+//; # Remove leading space - s/\s+$//; # Remove ending space - - # This is strange, but we need to fill whitespace inside - # quotes with something, to remove later. We do this to - # be able to split on space. Else, we have trouble with - # options like - # - # --someopt="--insideopt1 --insideopt2" - # - # But still with this, we are not 100% sure it is right, - # we need a shell to do it right. - -# print STDERR "\n"; -# print STDERR "AAA: $_\n"; - - s/\'([^\'\"]*)\'/unspace($1,"\x0a")/ge; - s/\"([^\'\"]*)\"/unspace($1,"\x0b")/ge; - s/\'([^\'\"]*)\'/unspace($1,"\x0a")/ge; - s/\"([^\'\"]*)\"/unspace($1,"\x0b")/ge; - -# print STDERR "BBB: $_\n"; - -# foreach my $arg (/(--?\w.*?)(?=\s+--?\w|$)/) - - # FIXME ENV vars should be expanded!!!! - - foreach my $arg (split(/[ \t]+/)) - { - $arg =~ tr/\x11\x0a\x0b/ \'\"/; # Put back real chars - # The outermost quotes has to go - $arg =~ s/^([^\'\"]*)\'(.*)\'([^\'\"]*)$/$1$2$3/ - or $arg =~ s/^([^\'\"]*)\"(.*)\"([^\'\"]*)$/$1$2$3/; - $arg =~ s/\\\\/\\/g; - - $arg =~ s/\$\{(\w+)\}/envsubst($1)/ge; - $arg =~ s/\$(\w+)/envsubst($1)/ge; - -# print STDERR "ARG: $arg\n"; - # Do not pass empty string since my_getopt is not capable to handle it. - if (length($arg)) - { - push(@args, $arg) - } - } - } - close FILE; - return \@args; -} - -sub envsubst { - my $string= shift; - - if ( ! defined $ENV{$string} ) - { - mtr_error("opt file referense \$$string that is unknown"); - } - - return $ENV{$string}; -} - -sub unspace { - my $string= shift; - my $quote= shift; - $string =~ s/[ \t]/\x11/g; - return "$quote$string$quote"; -} +sub mtr_printfile($); +sub mtr_lastlinesfromfile ($$); # Read a whole file, stripping leading and trailing whitespace. sub mtr_fromfile ($) { @@ -161,19 +41,6 @@ sub mtr_fromfile ($) { return $text; } -sub mtr_lastlinefromfile ($) { - my $file= shift; - my $text; - - open(FILE,"<",$file) or mtr_error("can't open file \"$file\": $!"); - while (my $line= <FILE>) - { - $text= $line; - } - close FILE; - return $text; -} - sub mtr_tofile ($@) { my $file= shift; @@ -183,6 +50,7 @@ sub mtr_tofile ($@) { close FILE; } + sub mtr_tonewfile ($@) { my $file= shift; @@ -191,6 +59,7 @@ sub mtr_tonewfile ($@) { close FILE; } + sub mtr_appendfile_to_file ($$) { my $from_file= shift; my $to_file= shift; @@ -203,6 +72,7 @@ sub mtr_appendfile_to_file ($$) { close TOFILE; } + # Read a whole file verbatim. sub mtr_grab_file($) { my $file= shift; @@ -215,4 +85,26 @@ sub mtr_grab_file($) { } +# Print the file to STDOUT +sub mtr_printfile($) { + my $file= shift; + open(FILE, '<', $file) + or warn $!; + print while(<FILE>); + close FILE; + return; +} + +sub mtr_lastlinesfromfile ($$) { + croak "usage: mtr_lastlinesfromfile(file,numlines)" unless (@_ == 2); + my ($file, $num_lines)= @_; + my $text; + open(FILE,"<",$file) or mtr_error("can't open file \"$file\": $!"); + my @lines= reverse <FILE>; + close FILE; + my $size= scalar(@lines); + $num_lines= $size unless ($size >= $num_lines); + return join("", reverse(splice(@lines, 0, $num_lines))); +} + 1; |