From: Ali Saidi Date: Tue, 14 Aug 2007 03:40:43 +0000 (-0400) Subject: Regression: See if using subprocess instead of os.system and erroring immediately... X-Git-Tag: m5_2.0_beta4~157^2~13 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b069b81acf498a538b1ce4b30ff8b2d96b2ec8de;p=gem5.git Regression: See if using subprocess instead of os.system and erroring immediately will stop regression randomly hanging. --HG-- extra : convert_revision : a663ae935edd1b6e8f0bb5b08583a5b9761d0939 --- diff --git a/util/regress b/util/regress index 4d3eddab8..fd4bd8863 100755 --- a/util/regress +++ b/util/regress @@ -31,6 +31,7 @@ import sys import os import optparse import datetime +from subprocess import call 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 def system(cmd): - if options.verbose: - print cmd - status = os.system(cmd) - if status != 0: - upper = (status & 0xff00) >> 8 - lower = (status & 0xff) - raise OSError, "shell command '%s' failed, status %d:%d" \ - % (cmd, upper, lower) + try: + retcode = call(cmd, shell=True) + if retcode < 0: + print >>sys.stderr, "Child was terminated by signal", -retcode + print >>sys.stderr, "When attemping to execute: %s" % cmd + sys.exit(1) + elif retcode > 0: + 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 def shellquote(s): @@ -75,34 +82,30 @@ def shellquote(s): s = "'%s'" % s return s -try: - if not tests: - print "No tests specified, just building binaries." - targets = ['build/%s/m5.%s' % (build, variant) - for build in builds - for variant in variants] - elif 'all' in tests: - targets = ['build/%s/tests/%s' % (build, variant) - for build in builds - for variant in variants] - else: - # 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 'quick' in tests and 'SPARC_FS' in builds: - builds.remove('SPARC_FS') - targets = ['build/%s/tests/%s/%s' % (build, variant, test) - for build in builds - for variant in variants - for test in tests] +if not tests: + print "No tests specified, just building binaries." + targets = ['build/%s/m5.%s' % (build, variant) + for build in builds + for variant in variants] +elif 'all' in tests: + targets = ['build/%s/tests/%s' % (build, variant) + for build in builds + for variant in variants] +else: + # 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 'quick' in tests and 'SPARC_FS' in builds: + builds.remove('SPARC_FS') + targets = ['build/%s/tests/%s/%s' % (build, variant, test) + for build in builds + for variant in variants + for test in tests] - scons_opts = options.scons_opts - if options.jobs != 1: - scons_opts += ' -j %d' % options.jobs +scons_opts = options.scons_opts +if options.jobs != 1: + 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)