Regression: See if using subprocess instead of os.system and erroring immediately will stop regression randomly hanging.
--HG-- extra : convert_revision : a663ae935edd1b6e8f0bb5b08583a5b9761d0939
This commit is contained in:
parent
ef32494e72
commit
b069b81acf
73
util/regress
73
util/regress
|
@ -31,6 +31,7 @@ import sys
|
||||||
import os
|
import os
|
||||||
import optparse
|
import optparse
|
||||||
import datetime
|
import datetime
|
||||||
|
from subprocess import call
|
||||||
|
|
||||||
progname = os.path.basename(sys.argv[0])
|
progname = os.path.basename(sys.argv[0])
|
||||||
|
|
||||||
|
@ -60,14 +61,20 @@ variants = options.variants.split(',')
|
||||||
|
|
||||||
# Call os.system() and raise exception if return status is non-zero
|
# Call os.system() and raise exception if return status is non-zero
|
||||||
def system(cmd):
|
def system(cmd):
|
||||||
if options.verbose:
|
try:
|
||||||
print cmd
|
retcode = call(cmd, shell=True)
|
||||||
status = os.system(cmd)
|
if retcode < 0:
|
||||||
if status != 0:
|
print >>sys.stderr, "Child was terminated by signal", -retcode
|
||||||
upper = (status & 0xff00) >> 8
|
print >>sys.stderr, "When attemping to execute: %s" % cmd
|
||||||
lower = (status & 0xff)
|
sys.exit(1)
|
||||||
raise OSError, "shell command '%s' failed, status %d:%d" \
|
elif retcode > 0:
|
||||||
% (cmd, upper, lower)
|
print >>sys.stderr, "Child returned", retcode
|
||||||
|
print >>sys.stderr, "When attemping to execute: %s" % cmd
|
||||||
|
sys.exit(1)
|
||||||
|
except OSError, e:
|
||||||
|
print >>sys.stderr, "Execution failed:", e
|
||||||
|
print >>sys.stderr, "When attemping to execute: %s" % cmd
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
# Quote string s so it can be passed as a shell arg
|
# Quote string s so it can be passed as a shell arg
|
||||||
def shellquote(s):
|
def shellquote(s):
|
||||||
|
@ -75,34 +82,30 @@ def shellquote(s):
|
||||||
s = "'%s'" % s
|
s = "'%s'" % s
|
||||||
return s
|
return s
|
||||||
|
|
||||||
try:
|
if not tests:
|
||||||
if not tests:
|
print "No tests specified, just building binaries."
|
||||||
print "No tests specified, just building binaries."
|
targets = ['build/%s/m5.%s' % (build, variant)
|
||||||
targets = ['build/%s/m5.%s' % (build, variant)
|
for build in builds
|
||||||
for build in builds
|
for variant in variants]
|
||||||
for variant in variants]
|
elif 'all' in tests:
|
||||||
elif 'all' in tests:
|
targets = ['build/%s/tests/%s' % (build, variant)
|
||||||
targets = ['build/%s/tests/%s' % (build, variant)
|
for build in builds
|
||||||
for build in builds
|
for variant in variants]
|
||||||
for variant in variants]
|
else:
|
||||||
else:
|
# Ugly! Since we don't have any quick SPARC_FS tests remove the SPARC_FS target
|
||||||
# Ugly! Since we don't have any quick SPARC_FS tests remove the SPARC_FS target
|
# If we ever get a quick SPARC_FS test, this code should be removed
|
||||||
# If we ever get a quick SPARC_FS test, this code should be removed
|
if 'quick' in tests and 'SPARC_FS' in builds:
|
||||||
if 'quick' in tests and 'SPARC_FS' in builds:
|
builds.remove('SPARC_FS')
|
||||||
builds.remove('SPARC_FS')
|
targets = ['build/%s/tests/%s/%s' % (build, variant, test)
|
||||||
targets = ['build/%s/tests/%s/%s' % (build, variant, test)
|
for build in builds
|
||||||
for build in builds
|
for variant in variants
|
||||||
for variant in variants
|
for test in tests]
|
||||||
for test in tests]
|
|
||||||
|
|
||||||
scons_opts = options.scons_opts
|
scons_opts = options.scons_opts
|
||||||
if options.jobs != 1:
|
if options.jobs != 1:
|
||||||
scons_opts += ' -j %d' % options.jobs
|
scons_opts += ' -j %d' % options.jobs
|
||||||
|
|
||||||
system('scons %s %s' % (scons_opts, ' '.join(targets)))
|
system('scons %s %s' % (scons_opts, ' '.join(targets)))
|
||||||
|
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
except OSError, exc:
|
|
||||||
print "%s: " % progname, exc
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
Loading…
Reference in a new issue