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:
Ali Saidi 2007-08-13 23:40:43 -04:00
parent ef32494e72
commit b069b81acf

View file

@ -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)