Display a warning prompt in presubmit if the tree status is in 'Caution'.
authorrmistry@google.com <rmistry@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Wed, 23 Jan 2013 14:35:58 +0000 (14:35 +0000)
committerrmistry@google.com <rmistry@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Wed, 23 Jan 2013 14:35:58 +0000 (14:35 +0000)
Example presubmit output:

Running presubmit upload checks ...

** Presubmit Warnings **
Tree state is: caution

***************
Please use caution in checkins
http://skia-tree-status-staging.appspot.com/banner-status?format=json
***************

There were presubmit warnings. Are you sure you wish to continue? (y/N):
Review URL: https://codereview.appspot.com/7200043

git-svn-id: http://skia.googlecode.com/svn/trunk@7337 2bbb7eff-a529-9590-31e7-b0007b416f81

PRESUBMIT.py

index 3159947..b5aeffc 100644 (file)
@@ -9,6 +9,7 @@ See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
 for more details about the presubmit API built into gcl.
 """
 
+
 def _CommonChecks(input_api, output_api):
   """Presubmit checks common to upload and commit."""
   results = []
@@ -35,18 +36,42 @@ def CheckChangeOnUpload(input_api, output_api):
   return results
 
 
+def _CheckTreeStatus(input_api, output_api, json_url):
+  """Check whether to allow commit.
+
+  Args:
+    input_api: input related apis.
+    output_api: output related apis.
+    json_url: url to download json style status.
+  """
+  tree_status_results = input_api.canned_checks.CheckTreeIsOpen(
+      input_api, output_api, json_url=json_url)
+  if not tree_status_results:
+    # Check for caution state only if tree is not closed.
+    connection = input_api.urllib2.urlopen(json_url)
+    status = input_api.json.loads(connection.read())
+    connection.close()
+    if 'caution' in status['message'].lower():
+      short_text = 'Tree state is: ' + status['general_state']
+      long_text = status['message'] + '\n' + json_url
+      tree_status_results.append(
+          output_api.PresubmitPromptWarning(
+              message=short_text, long_text=long_text))
+  return tree_status_results
+
+
 def CheckChangeOnCommit(input_api, output_api):
   """Presubmit checks for the change on commit.
 
   The following are the presubmit checks:
   * Check change has one and only one EOL.
-  * Ensures that the Skia tree is not closed in
-    http://skia-tree-status.appspot.com/
+  * Ensures that the Skia tree is open in
+    http://skia-tree-status.appspot.com/. Shows a warning if it is in 'Caution'
+    state and an error if it is in 'Closed' state.
   """
   results = []
   results.extend(_CommonChecks(input_api, output_api))
   results.extend(
-      input_api.canned_checks.CheckTreeIsOpen(
-          input_api, output_api, json_url=(
-              'http://skia-tree-status.appspot.com/banner-status?format=json')))
+      _CheckTreeStatus(input_api, output_api, json_url=(
+          'http://skia-tree-status.appspot.com/banner-status?format=json')))
   return results