Merge tag 'ktest-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 18 Mar 2024 22:27:03 +0000 (15:27 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 18 Mar 2024 22:27:03 +0000 (15:27 -0700)
Pull ktest updates from Steven Rostedt:

 - Allow variables to contain variables. This makes the shell commands
   have a bit more flexibility to reuse existing variables.

 - Have make_warnings_file in build-only mode require limited variables

   The make_warnings_file test will create a file with all existing
   warnings (which can be used to compare against in builds with new
   commits). Add it to the build-only list that doesn't require other
   variables (like how to reset a machine), as the make_warnings_file
   makes the most sense on build only tests.

* tag 'ktest-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-ktest:
  ktest: force $buildonly = 1 for 'make_warnings_file' test type
  ktest.pl: Process variables within variables

tools/testing/ktest/ktest.pl

index 829f5bd..eb31cd9 100755 (executable)
@@ -792,13 +792,13 @@ sub process_variables {
     my $retval = "";
 
     # We want to check for '\', and it is just easier
-    # to check the previous characet of '$' and not need
+    # to check the previous character of '$' and not need
     # to worry if '$' is the first character. By adding
     # a space to $value, we can just check [^\\]\$ and
     # it will still work.
     $value = " $value";
 
-    while ($value =~ /(.*?[^\\])\$\{(.*?)\}(.*)/) {
+    while ($value =~ /(.*?[^\\])\$\{([^\{]*?)\}(.*)/) {
        my $begin = $1;
        my $var = $2;
        my $end = $3;
@@ -818,16 +818,20 @@ sub process_variables {
            # we simple convert to 0
            $retval = "${retval}0";
        } else {
-           # put back the origin piece.
-           $retval = "$retval\$\{$var\}";
+           # put back the origin piece, but with $#### to not reprocess it
+           $retval = "$retval\$####\{$var\}";
            # This could be an option that is used later, save
            # it so we don't warn if this option is not one of
            # ktests options.
            $used_options{$var} = 1;
        }
-       $value = $end;
+       $value = "$retval$end";
+       $retval = "";
     }
-    $retval = "$retval$value";
+    $retval = $value;
+
+    # Convert the saved variables with $####{var} back to ${var}
+    $retval =~ s/\$####/\$/g;
 
     # remove the space added in the beginning
     $retval =~ s/ //;
@@ -843,6 +847,7 @@ sub set_value {
     if ($lvalue =~ /^(TEST|BISECT|CONFIG_BISECT)_TYPE(\[.*\])?$/ &&
        $prvalue !~ /^(config_|)bisect$/ &&
        $prvalue !~ /^build$/ &&
+       $prvalue !~ /^make_warnings_file$/ &&
        $buildonly) {
 
        # Note if a test is something other than build, then we