From: Ian Jackson Date: Fri, 16 Jun 2017 14:50:06 +0000 (+0100) Subject: sg-run-job: Support scripts which need to be told when to quit X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=2eea9ed2b29ef3c6054eb17150a3f671e34c5386;p=people%2Froyger%2Fosstest.git sg-run-job: Support scripts which need to be told when to quit We give them a pipe on stdin, whose writing end we close when we want to reap them. Signed-off-by: Ian Jackson --- diff --git a/sg-run-job b/sg-run-job index b820642..8acb902 100755 --- a/sg-run-job +++ b/sg-run-job @@ -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] }