From c29934489f9c73315a24009e6605be155ef27707 Mon Sep 17 00:00:00 2001 From: "rmistry@google.com" Date: Wed, 23 Jan 2013 14:35:58 +0000 Subject: [PATCH] Display a warning prompt in presubmit if the tree status is in 'Caution'. 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 | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 3159947..b5aeffc 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -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 -- 2.7.4