From fa4faff9624eabb51f218dc6c38cabad7182d222 Mon Sep 17 00:00:00 2001 From: "jkummerow@chromium.org" Date: Thu, 5 Dec 2013 12:37:24 +0000 Subject: [PATCH] 'make quickcheck': Assorted improvements. 'make ia32' should not build ia32.optdebug. 'make ia32.clean' should delete ia32.optdebug output. 'make quickcheck' should be terminatable by hitting Ctrl+C just once. R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/106443002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18259 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- Makefile | 3 +- tools/run-tests.py | 7 +++- tools/testrunner/local/commands.py | 75 ++++++++++++++++++++------------------ 3 files changed, 46 insertions(+), 39 deletions(-) diff --git a/Makefile b/Makefile index 910bcbd..d2c9a9d 100644 --- a/Makefile +++ b/Makefile @@ -273,7 +273,7 @@ mips mips.release mips.debug: .SECONDEXPANSION: $(MODES): $(addsuffix .$$@,$(DEFAULT_ARCHES)) -$(ARCHES): $(addprefix $$@.,$(MODES)) +$(ARCHES): $(addprefix $$@.,$(DEFAULT_MODES)) # Defines how to build a particular target (e.g. ia32.release). $(BUILDS): $(OUTDIR)/Makefile.$$@ @@ -368,6 +368,7 @@ $(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES) $(NACL_ARCHES)): rm -f $(OUTDIR)/Makefile.$(basename $@)* rm -rf $(OUTDIR)/$(basename $@).release rm -rf $(OUTDIR)/$(basename $@).debug + rm -rf $(OUTDIR)/$(basename $@).optdebug find $(OUTDIR) -regex '.*\(host\|target\)\.$(basename $@).*\.mk' -delete native.clean: diff --git a/tools/run-tests.py b/tools/run-tests.py index 28926e5..15c42d0 100755 --- a/tools/run-tests.py +++ b/tools/run-tests.py @@ -329,7 +329,10 @@ def Main(): s.DownloadData() for (arch, mode) in options.arch_and_mode: - code = Execute(arch, mode, args, options, suites, workspace) + try: + code = Execute(arch, mode, args, options, suites, workspace) + except KeyboardInterrupt: + return 2 exit_code = exit_code or code return exit_code @@ -449,7 +452,7 @@ def Execute(arch, mode, args, options, suites, workspace): return exit_code overall_duration = time.time() - start_time except KeyboardInterrupt: - return 1 + raise if options.time: verbose.PrintTestDurations(suites, overall_duration) diff --git a/tools/testrunner/local/commands.py b/tools/testrunner/local/commands.py index 01f170d..4f3dc51 100644 --- a/tools/testrunner/local/commands.py +++ b/tools/testrunner/local/commands.py @@ -64,34 +64,34 @@ def Win32SetErrorMode(mode): def RunProcess(verbose, timeout, args, **rest): - if verbose: print "#", " ".join(args) - popen_args = args - prev_error_mode = SEM_INVALID_VALUE - if utils.IsWindows(): - popen_args = subprocess.list2cmdline(args) - # Try to change the error mode to avoid dialogs on fatal errors. Don't - # touch any existing error mode flags by merging the existing error mode. - # See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx. - error_mode = SEM_NOGPFAULTERRORBOX - prev_error_mode = Win32SetErrorMode(error_mode) - Win32SetErrorMode(error_mode | prev_error_mode) - process = subprocess.Popen( - shell=utils.IsWindows(), - args=popen_args, - **rest - ) - if (utils.IsWindows() and prev_error_mode != SEM_INVALID_VALUE): - Win32SetErrorMode(prev_error_mode) - # Compute the end time - if the process crosses this limit we - # consider it timed out. - if timeout is None: end_time = None - else: end_time = time.time() + timeout - timed_out = False - # Repeatedly check the exit code from the process in a - # loop and keep track of whether or not it times out. - exit_code = None - sleep_time = INITIAL_SLEEP_TIME try: + if verbose: print "#", " ".join(args) + popen_args = args + prev_error_mode = SEM_INVALID_VALUE + if utils.IsWindows(): + popen_args = subprocess.list2cmdline(args) + # Try to change the error mode to avoid dialogs on fatal errors. Don't + # touch any existing error mode flags by merging the existing error mode. + # See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx. + error_mode = SEM_NOGPFAULTERRORBOX + prev_error_mode = Win32SetErrorMode(error_mode) + Win32SetErrorMode(error_mode | prev_error_mode) + process = subprocess.Popen( + shell=utils.IsWindows(), + args=popen_args, + **rest + ) + if (utils.IsWindows() and prev_error_mode != SEM_INVALID_VALUE): + Win32SetErrorMode(prev_error_mode) + # Compute the end time - if the process crosses this limit we + # consider it timed out. + if timeout is None: end_time = None + else: end_time = time.time() + timeout + timed_out = False + # Repeatedly check the exit code from the process in a + # loop and keep track of whether or not it times out. + exit_code = None + sleep_time = INITIAL_SLEEP_TIME while exit_code is None: if (not end_time is None) and (time.time() >= end_time): # Kill the process and wait for it to exit. @@ -131,10 +131,10 @@ def CheckedUnlink(name): def Execute(args, verbose=False, timeout=None): - args = [ c for c in args if c != "" ] - (fd_out, outname) = tempfile.mkstemp() - (fd_err, errname) = tempfile.mkstemp() try: + args = [ c for c in args if c != "" ] + (fd_out, outname) = tempfile.mkstemp() + (fd_err, errname) = tempfile.mkstemp() (exit_code, timed_out) = RunProcess( verbose, timeout, @@ -142,12 +142,15 @@ def Execute(args, verbose=False, timeout=None): stdout=fd_out, stderr=fd_err ) + except KeyboardInterrupt: + raise except: raise - os.close(fd_out) - os.close(fd_err) - out = file(outname).read() - errors = file(errname).read() - CheckedUnlink(outname) - CheckedUnlink(errname) + finally: + os.close(fd_out) + os.close(fd_err) + out = file(outname).read() + errors = file(errname).read() + CheckedUnlink(outname) + CheckedUnlink(errname) return output.Output(exit_code, timed_out, out, errors) -- 2.7.4