ktest: Add eval '=~' command to modify variables in config file
With the added variable ${KERNEL_VERSION}, it is useful to be able to use parts of it for other variables. For example, if you want to create a warnings file for each major kernel version to test sub versions against you can create your warnings file with like this: WARNINGS_FILE = warnings-file-${KERNEL_VERSION} But this may add 3.8.12 or something, and we want all 3.8.* to use the same file, and 3.10.* to use another file, and so on. With the eval command we can, by adding: WARNINGS_FILE =~ s/(-file-\d+\.\d+).*/$1/ Which will chop off the extra characters after the 3.8. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
8e80bf05ff
commit
c75d22d9c6
|
@ -18,6 +18,7 @@ $| = 1;
|
|||
my %opt;
|
||||
my %repeat_tests;
|
||||
my %repeats;
|
||||
my %evals;
|
||||
|
||||
#default opts
|
||||
my %default = (
|
||||
|
@ -448,6 +449,27 @@ $config_help{"REBOOT_SCRIPT"} = << "EOF"
|
|||
EOF
|
||||
;
|
||||
|
||||
sub _logit {
|
||||
if (defined($opt{"LOG_FILE"})) {
|
||||
open(OUT, ">> $opt{LOG_FILE}") or die "Can't write to $opt{LOG_FILE}";
|
||||
print OUT @_;
|
||||
close(OUT);
|
||||
}
|
||||
}
|
||||
|
||||
sub logit {
|
||||
if (defined($opt{"LOG_FILE"})) {
|
||||
_logit @_;
|
||||
} else {
|
||||
print @_;
|
||||
}
|
||||
}
|
||||
|
||||
sub doprint {
|
||||
print @_;
|
||||
_logit @_;
|
||||
}
|
||||
|
||||
sub read_prompt {
|
||||
my ($cancel, $prompt) = @_;
|
||||
|
||||
|
@ -665,6 +687,22 @@ sub set_value {
|
|||
}
|
||||
}
|
||||
|
||||
sub set_eval {
|
||||
my ($lvalue, $rvalue, $name) = @_;
|
||||
|
||||
my $prvalue = process_variables($rvalue);
|
||||
my $arr;
|
||||
|
||||
if (defined($evals{$lvalue})) {
|
||||
$arr = $evals{$lvalue};
|
||||
} else {
|
||||
$arr = [];
|
||||
$evals{$lvalue} = $arr;
|
||||
}
|
||||
|
||||
push @{$arr}, $rvalue;
|
||||
}
|
||||
|
||||
sub set_variable {
|
||||
my ($lvalue, $rvalue) = @_;
|
||||
|
||||
|
@ -950,6 +988,20 @@ sub __read_config {
|
|||
$test_case = 1;
|
||||
}
|
||||
|
||||
} elsif (/^\s*([A-Z_\[\]\d]+)\s*=~\s*(.*?)\s*$/) {
|
||||
|
||||
next if ($skip);
|
||||
|
||||
my $lvalue = $1;
|
||||
my $rvalue = $2;
|
||||
|
||||
if ($default || $lvalue =~ /\[\d+\]$/) {
|
||||
set_eval($lvalue, $rvalue, $name);
|
||||
} else {
|
||||
my $val = "$lvalue\[$test_num\]";
|
||||
set_eval($val, $rvalue, $name);
|
||||
}
|
||||
|
||||
} elsif (/^\s*([A-Z_\[\]\d]+)\s*=\s*(.*?)\s*$/) {
|
||||
|
||||
next if ($skip);
|
||||
|
@ -1147,6 +1199,33 @@ sub __eval_option {
|
|||
return $retval;
|
||||
}
|
||||
|
||||
sub process_evals {
|
||||
my ($name, $option, $i) = @_;
|
||||
|
||||
my $option_name = "$name\[$i\]";
|
||||
my $ev;
|
||||
|
||||
my $old_option = $option;
|
||||
|
||||
if (defined($evals{$option_name})) {
|
||||
$ev = $evals{$option_name};
|
||||
} elsif (defined($evals{$name})) {
|
||||
$ev = $evals{$name};
|
||||
} else {
|
||||
return $option;
|
||||
}
|
||||
|
||||
for my $e (@{$ev}) {
|
||||
eval "\$option =~ $e";
|
||||
}
|
||||
|
||||
if ($option ne $old_option) {
|
||||
doprint("$name changed from '$old_option' to '$option'\n");
|
||||
}
|
||||
|
||||
return $option;
|
||||
}
|
||||
|
||||
sub eval_option {
|
||||
my ($name, $option, $i) = @_;
|
||||
|
||||
|
@ -1167,30 +1246,11 @@ sub eval_option {
|
|||
$option = __eval_option($name, $option, $i);
|
||||
}
|
||||
|
||||
$option = process_evals($name, $option, $i);
|
||||
|
||||
return $option;
|
||||
}
|
||||
|
||||
sub _logit {
|
||||
if (defined($opt{"LOG_FILE"})) {
|
||||
open(OUT, ">> $opt{LOG_FILE}") or die "Can't write to $opt{LOG_FILE}";
|
||||
print OUT @_;
|
||||
close(OUT);
|
||||
}
|
||||
}
|
||||
|
||||
sub logit {
|
||||
if (defined($opt{"LOG_FILE"})) {
|
||||
_logit @_;
|
||||
} else {
|
||||
print @_;
|
||||
}
|
||||
}
|
||||
|
||||
sub doprint {
|
||||
print @_;
|
||||
_logit @_;
|
||||
}
|
||||
|
||||
sub run_command;
|
||||
sub start_monitor;
|
||||
sub end_monitor;
|
||||
|
|
Loading…
Reference in a new issue