1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # Copyright (c) 2009 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.
- import os
- import re
- import subprocess
- import sys
- import breakpad
- import presubmit_support
- import scm
- def Backquote(cmd, cwd=None):
- """Like running `cmd` in a shell script."""
- return subprocess.Popen(cmd,
- cwd=cwd,
- stdout=subprocess.PIPE).communicate()[0].strip()
- class ChangeOptions:
- def __init__(self, commit=None, upstream_branch=None):
- self.commit = commit
- self.verbose = None
- self.default_presubmit = None
- self.may_prompt = None
- root = Backquote(['git', 'rev-parse', '--show-cdup'])
- if not root:
- root = "."
- absroot = os.path.abspath(root)
- if not root:
- raise Exception("Could not get root directory.")
- log = Backquote(['git', 'show', '--name-only',
- '--pretty=format:%H%n%s%n%n%b'])
- m = re.match(r'^(\w+)\n(.*)$', log, re.MULTILINE|re.DOTALL)
- if not m:
- raise Exception("Could not parse log message: %s" % log)
- name = m.group(1)
- description = m.group(2)
- files = scm.GIT.CaptureStatus([root], upstream_branch)
- issue = Backquote(['git', 'cl', 'status', '--field=id'])
- patchset = None
- self.change = presubmit_support.GitChange(name, description, absroot, files,
- issue, patchset)
- def RunHooks(hook_name, upstream_branch):
- commit = (hook_name == 'pre-cl-dcommit')
- # Create our options based on the command-line args and the current checkout.
- options = ChangeOptions(commit=commit, upstream_branch=upstream_branch)
- # Run the presubmit checks.
- if presubmit_support.DoPresubmitChecks(options.change,
- options.commit,
- options.verbose,
- sys.stdout,
- sys.stdin,
- options.default_presubmit,
- options.may_prompt):
- sys.exit(0)
- else:
- sys.exit(1)
|