summaryrefslogtreecommitdiffstats
path: root/o3d/PRESUBMIT.py
diff options
context:
space:
mode:
authorbradnelson@google.com <bradnelson@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-17 22:53:41 +0000
committerbradnelson@google.com <bradnelson@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-17 22:53:41 +0000
commit46b7ca2a179aff5643786cca879eddd8485c2a82 (patch)
tree059074f313cd58a92418ad234285cfb4c2c6d59e /o3d/PRESUBMIT.py
parent81f7d4217129cc631d94377808381989dc33ad0c (diff)
downloadchromium_src-46b7ca2a179aff5643786cca879eddd8485c2a82.zip
chromium_src-46b7ca2a179aff5643786cca879eddd8485c2a82.tar.gz
chromium_src-46b7ca2a179aff5643786cca879eddd8485c2a82.tar.bz2
Adding a presubmit script to honor the tree status.
BUG=None TEST=None Review URL: http://codereview.chromium.org/208016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26519 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/PRESUBMIT.py')
-rwxr-xr-xo3d/PRESUBMIT.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/o3d/PRESUBMIT.py b/o3d/PRESUBMIT.py
new file mode 100755
index 0000000..d889ca7
--- /dev/null
+++ b/o3d/PRESUBMIT.py
@@ -0,0 +1,91 @@
+# Copyright 2009, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os
+import sys
+
+
+def FindOnPage(input_api, url, regex):
+ """Given a url, download it and find the part matching a regex.
+ Arguments:
+ input_api: the limited set of input modules allowed in presubmit
+ url: url to download
+ regex: regex to match on
+ Returns:
+ A string extracted from the match, or None if no match or error.
+ """
+ try:
+ connection = input_api.urllib2.urlopen(url)
+ text = connection.read()
+ connection.close()
+ match = input_api.re.search(regex, text)
+ if match:
+ return match.group(1)
+ else:
+ return None
+ except IOError, e:
+ print str(e)
+ return None
+
+
+def CheckTreeIsOpen(input_api, output_api, url, url_text):
+ """Similar to the one in presubmit_canned_checks except it shows an helpful
+ status text instead.
+ Arguments:
+ input_api: the limited set of input modules allowed in presubmit
+ output_api: the limited set of output modules allowed in presubmit
+ url: url to get numerical tree status from
+ url_text: url to get human readable tree status from
+ regex: regex to match on
+ Returns:
+ A list of presubmit warnings.
+ """
+ assert(input_api.is_committing)
+ # Check if tree is open.
+ status = FindOnPage(input_api, url, '([0-9]+)')
+ if status and int(status):
+ return []
+ # Try to find out what failed.
+ message = FindOnPage(input_api, url_text,
+ r'\<div class\="Notice"\>(.*)\<\/div\>')
+ if message:
+ return [output_api.PresubmitPromptWarning("The tree is closed.",
+ long_text=message.strip())]
+ # Report unknown reason.
+ return [output_api.PresubmitPromptWarning(
+ "The tree status can't be checked.")]
+
+
+def CheckChangeOnCommit(input_api, output_api):
+ report = []
+ report.extend(CheckTreeIsOpen(
+ input_api, output_api,
+ 'http://o3d-status.appspot.com/status',
+ 'http://o3d-status.appspot.com/current'))
+ return report