Index: git-cl-upload-hook |
=================================================================== |
--- git-cl-upload-hook (revision 0) |
+++ git-cl-upload-hook (revision 0) |
@@ -0,0 +1,75 @@ |
+#!/usr/bin/python |
+# 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 |
+ |
+# Find depot_tools in PATH, append it to sys.path so we can import. |
+paths = os.environ.get("PATH") |
+for path in paths.split(':'): |
+ if not path.endswith("depot_tools"): |
+ continue |
+ sys.path.append(path) |
+ break |
+ |
+import gclient_scm |
+import presubmit_support |
+ |
+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 = os.path.abspath(Backquote(['git', 'rev-parse', '--show-cdup'])) |
+ 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 = gclient_scm.CaptureGitStatus([root], upstream_branch) |
+ issue = Backquote(['git', 'cl', 'status', '--field=id']) |
+ patchset = None |
+ self.change = presubmit_support.GitChange(name, description, root, files, |
+ issue, patchset) |
+ |
+ |
+# Ensure we were called with the necessary number of arguments. |
+program_name = os.path.basename(sys.argv[0]) |
+if len(sys.argv) < 2: |
+ raise Exception("usage: %s [upstream branch]" % program_name) |
+ |
+# Get arguments from how we were called. |
+commit = (program_name == 'pre-cl-dcommit') |
+upstream_branch = sys.argv[1] |
+ |
+# 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) |
Property changes on: git-cl-upload-hook |
___________________________________________________________________ |
Added: svn:executable |
+ * |