]> xenbits.xensource.com Git - people/aperard/osstest.git/commitdiff
sg-run-job: Support scripts which need to be told when to quit
authorIan Jackson <ian.jackson@eu.citrix.com>
Fri, 16 Jun 2017 14:50:06 +0000 (15:50 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Wed, 21 Jun 2017 22:22:58 +0000 (23:22 +0100)
We give them a pipe on stdin, whose writing end we close when we want
to reap them.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
sg-run-job

index b82064271d60861fef7b6a54d1e7c537092c4e77..8acb9029f8e83dcf3dd2d75fbd037d2da8510faf 100755 (executable)
@@ -238,6 +238,11 @@ proc testid_matches_globs {testid globs} {
 #       to find the script in the current directory.  This will be
 #       added implicitly.
 #
+#       If the very first item is "|" (before the script name), the
+#       script will get a pipe as its standard input rather than
+#       /dev/null; this pipe will give EOF when sg-run-job wants to
+#       end the script (ie, when reap-ts is called).
+#
 #       An argument which is precisely "+" toggles whether the
 #       subsequent items in SCRIPT-ARGS are added to the expansion of
 #       /@ in TESTID.  (The "+" itself is not added to the arguments
@@ -293,6 +298,12 @@ proc spawn-ts {iffail testid args} {
     set real_args {}
     set adding 1
     set testid_args {}
+    set child_pipe_mode r
+
+    if {![string compare | [lindex $args 0]]} {
+       set child_pipe_mode w
+       lshift args
+    }
     foreach arg $args {
         if {![string compare + $arg]} {
             set adding [expr {!$adding}]
@@ -339,12 +350,16 @@ proc spawn-ts {iffail testid args} {
     if {[var-or-default env(OSSTEST_SIMULATE) 0]} { set xprefix echo }
 
     set log [jobdb::step-log-filename $flight $jobinfo(job) $stepno $ts]
-    set redirects {< /dev/null}
+    set redirects {}
     if {[string length $log]} {
         lappend redirects 2> $log
     } else {
         lappend redirects 2>@ stderr
     }
+    switch -exact $child_pipe_mode {
+       r { lappend redirects < /dev/null }
+       w { lappend redirects >@ stderr }
+    }
 
     set cmd [concat \
                  [list sh -xc "
@@ -357,7 +372,7 @@ proc spawn-ts {iffail testid args} {
                      exit \$rc
                  " x $testid ./$ts] \
                  $real_args $redirects]
-    set fh [open |$cmd r]
+    set fh [open |$cmd $child_pipe_mode]
     return [list fh $fh $details]
 }