Index: scripts/slave/chromium/run_crash_handler.py |
diff --git a/scripts/slave/chromium/run_crash_handler.py b/scripts/slave/chromium/run_crash_handler.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..11a5b65de31303d9f56a96123fc9769ccf0e9302 |
--- /dev/null |
+++ b/scripts/slave/chromium/run_crash_handler.py |
@@ -0,0 +1,71 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""A tool to run the crash handler executable, used by the buildbot slaves. |
+ |
+ When this is run, the current directory (cwd) should be the outer build |
+ directory (e.g., chrome-release/build/). |
+ |
+ This can only be run on Windows. |
+ |
+ For a list of command-line options, call this script with '--help'. |
+""" |
+ |
+import optparse |
+import os |
+import sys |
+try: |
+ # pylint: disable=F0401 |
+ import win32process |
+except ImportError: |
+ print >> sys.stderr, 'This script runs on Windows only.' |
+ sys.exit(1) |
+ |
+from common import chromium_utils |
+from slave import build_directory |
+ |
+USAGE = '%s [options]' % os.path.basename(sys.argv[0]) |
+ |
+ |
+def main(): |
+ """Using the target build configuration, run the crash_service.exe |
+ executable. |
+ """ |
+ option_parser = optparse.OptionParser(usage=USAGE) |
+ |
+ option_parser.add_option('--target', default='Release', |
+ help='build target (Debug or Release)') |
+ option_parser.add_option('--build-dir', help='ignored') |
+ options, args = option_parser.parse_args() |
+ options.build_dir = build_directory.GetBuildOutputDirectory() |
+ |
+ if args: |
+ option_parser.error('No args are supported') |
+ |
+ build_dir = os.path.abspath(options.build_dir) |
+ exe_path = os.path.join(build_dir, options.target, 'crash_service.exe') |
+ if not os.path.exists(exe_path): |
+ raise chromium_utils.PathNotFound('Unable to find %s' % exe_path) |
+ |
+ # crash_service's window can interfere with interactive ui tests. |
+ cmd = exe_path + ' --no-window' |
+ |
+ print '\n' + cmd + '\n', |
+ |
+ # We cannot use Popen or os.spawn here because buildbot will wait until |
+ # the process terminates before going to the next step. Since we want to |
+ # keep the process alive, we need to explicitly say that we want the |
+ # process to be detached and that we don't want to inherit handles from |
+ # the parent process. |
+ si = win32process.STARTUPINFO() |
+ details = win32process.CreateProcess(None, cmd, None, None, 0, |
+ win32process.DETACHED_PROCESS, None, |
+ None, si) |
+ print '\nCreated with process id %d\n' % details[2] |
+ return 0 |
+ |
+ |
+if '__main__' == __name__: |
+ sys.exit(main()) |