| Index: commit-queue/verification/presubmit_check.py
|
| ===================================================================
|
| --- commit-queue/verification/presubmit_check.py (revision 249146)
|
| +++ commit-queue/verification/presubmit_check.py (working copy)
|
| @@ -1,97 +0,0 @@
|
| -# coding=utf8
|
| -# 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.
|
| -"""Runs presubmit check on the source tree."""
|
| -
|
| -import logging
|
| -import os
|
| -import sys
|
| -import time
|
| -
|
| -from verification import base
|
| -
|
| -import find_depot_tools # pylint: disable=W0611
|
| -import subprocess2
|
| -
|
| -
|
| -class PresubmitCheckVerifier(base.VerifierCheckout):
|
| - name = 'presubmit'
|
| -
|
| - def __init__(self, context_obj, timeout=6*60):
|
| - super(PresubmitCheckVerifier, self).__init__(context_obj)
|
| - self.root_dir = os.path.dirname(os.path.abspath(__file__))
|
| - self.execution_timeout = timeout
|
| -
|
| - def verify(self, pending):
|
| - """Runs the presubmit script synchronously.
|
| -
|
| - TODO(maruel): Now that it runs out of process, it should be run
|
| - asynchronously. That means that the PRESUBMIT checks needs to be better
|
| - written, if an integration tests starts a service, it needs to be able to
|
| - use an ephemeral port and not an hardcoded port.
|
| - """
|
| - logging.info('Presubmit check for %s' % ','.join(pending.files))
|
| - cmd = [
|
| - sys.executable,
|
| - os.path.join(self.root_dir, 'presubmit_shim.py'),
|
| - '--commit',
|
| - '--author', str(pending.owner),
|
| - '--issue', str(pending.issue),
|
| - '--patchset', str(pending.patchset),
|
| - '--name', pending.pending_name(),
|
| - '--description', pending.description,
|
| - '--rietveld_url', self.context.rietveld.url,
|
| - ]
|
| - cmd.extend(pending.files)
|
| - start = time.time()
|
| - self.send_status(pending, {})
|
| -
|
| - # Disable breakpad, no need to notify maintainers on internal crashes.
|
| - env = os.environ.copy()
|
| - env['NO_BREAKPAD'] = '1'
|
| -
|
| - try:
|
| - # Do not pass them through the command line.
|
| - data = '%s\n%s\n' % (
|
| - self.context.rietveld.email, self.context.rietveld.password)
|
| - # Use check_output() so stdout is kept when an exception is thrown.
|
| - output = subprocess2.check_output(
|
| - cmd,
|
| - timeout=self.execution_timeout,
|
| - stderr=subprocess2.STDOUT,
|
| - stdin=data,
|
| - env=env,
|
| - preexec_fn=os.setpgrp)
|
| - pending.verifications[self.name] = base.SimpleStatus(state=base.SUCCEEDED)
|
| - self.send_status(
|
| - pending,
|
| - {
|
| - 'duration': time.time() - start,
|
| - 'output': output,
|
| - })
|
| - except subprocess2.CalledProcessError as e:
|
| - output = (
|
| - 'Presubmit check for %s failed and returned exit status %s.\n') % (
|
| - pending.pending_name(), e.returncode)
|
| - duration = time.time() - start
|
| - timed_out = duration > self.execution_timeout
|
| - if timed_out:
|
| - output += (
|
| - 'The presubmit check was hung. It took %2.1f seconds to execute '
|
| - 'and the time limit is %2.1f seconds.\n') % (
|
| - duration, self.execution_timeout)
|
| - output += '\n%s' % e.stdout
|
| - pending.verifications[self.name] = base.SimpleStatus(
|
| - state=base.FAILED, error_message=output)
|
| - self.send_status(
|
| - pending,
|
| - {
|
| - 'duration': duration,
|
| - 'output': e.stdout,
|
| - 'return': e.returncode,
|
| - 'timed_out': timed_out,
|
| - })
|
| -
|
| - def update_status(self, queue):
|
| - pass
|
|
|