| Index: depot_tools/presubmit_canned_checks.py
|
| ===================================================================
|
| --- depot_tools/presubmit_canned_checks.py (revision 0)
|
| +++ depot_tools/presubmit_canned_checks.py (revision 0)
|
| @@ -0,0 +1,102 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2006-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.
|
| +
|
| +"""Generic presubmit checks that can be reused by other presubmit checks."""
|
| +
|
| +
|
| +def CheckChangeHasTestedField(input_api, output_api):
|
| + """Requires that the changelist have a TESTED= field."""
|
| + if input_api.change.Tested:
|
| + return []
|
| + else:
|
| + return [output_api.PresubmitError("Changelist must have a TESTED= field.")]
|
| +
|
| +
|
| +def CheckChangeHasQaField(input_api, output_api):
|
| + """Requires that the changelist have a QA= field."""
|
| + if input_api.change.QA:
|
| + return []
|
| + else:
|
| + return [output_api.PresubmitError("Changelist must have a QA= field.")]
|
| +
|
| +
|
| +def CheckDoNotSubmitInDescription(input_api, output_api):
|
| + """Checks that the user didn't add 'DO NOT ' + 'SUBMIT' to the CL description.
|
| + """
|
| + keyword = 'DO NOT ' + 'SUBMIT'
|
| + if keyword in input_api.change.DescriptionText():
|
| + return [output_api.PresubmitError(
|
| + keyword + " is present in the changelist description.")]
|
| + else:
|
| + return []
|
| +
|
| +
|
| +def CheckDoNotSubmitInFiles(input_api, output_api):
|
| + """Checks that the user didn't add 'DO NOT ' + 'SUBMIT' to any files."""
|
| + keyword = 'DO NOT ' + 'SUBMIT'
|
| + for f, line_num, line in input_api.RightHandSideLines():
|
| + if keyword in line:
|
| + text = 'Found ' + keyword + ' in %s, line %s' % (f.LocalPath(), line_num)
|
| + return [output_api.PresubmitError(text)]
|
| + return []
|
| +
|
| +
|
| +def CheckDoNotSubmit(input_api, output_api):
|
| + return (
|
| + CheckDoNotSubmitInDescription(input_api, output_api) +
|
| + CheckDoNotSubmitInFiles(input_api, output_api)
|
| + )
|
| +
|
| +
|
| +def CheckChangeHasNoTabs(input_api, output_api):
|
| + """Checks that there are no tab characters in any of the text files to be
|
| + submitted.
|
| + """
|
| + for f, line_num, line in input_api.RightHandSideLines():
|
| + if '\t' in line:
|
| + return [output_api.PresubmitError(
|
| + "Found a tab character in %s, line %s" %
|
| + (f.LocalPath(), line_num))]
|
| + return []
|
| +
|
| +
|
| +def CheckLongLines(input_api, output_api, maxlen=80):
|
| + """Checks that there aren't any lines longer than maxlen characters in any of
|
| + the text files to be submitted.
|
| + """
|
| + basename = input_api.basename
|
| +
|
| + bad = []
|
| + for f, line_num, line in input_api.RightHandSideLines():
|
| + if line.endswith('\n'):
|
| + line = line[:-1]
|
| + if len(line) > maxlen:
|
| + bad.append(
|
| + '%s, line %s, %s chars' %
|
| + (basename(f.LocalPath()), line_num, len(line)))
|
| + if len(bad) == 5: # Just show the first 5 errors.
|
| + break
|
| +
|
| + if bad:
|
| + msg = "Found lines longer than %s characters (first 5 shown)." % maxlen
|
| + return [output_api.PresubmitPromptWarning(msg, items=bad)]
|
| + else:
|
| + return []
|
| +
|
| +
|
| +def CheckTreeIsOpen(input_api, output_api, url, closed):
|
| + """Checks that an url's content doesn't match a regexp that would mean that
|
| + the tree is closed."""
|
| + try:
|
| + connection = input_api.urllib2.urlopen(url)
|
| + status = connection.read()
|
| + connection.close()
|
| + if input_api.re.match(closed, status):
|
| + long_text = status + '\n' + url
|
| + return [output_api.PresubmitError("The tree is closed.",
|
| + long_text=long_text)]
|
| + except IOError:
|
| + pass
|
| + return []
|
|
|
| Property changes on: depot_tools\presubmit_canned_checks.py
|
| ___________________________________________________________________
|
| Added: svn:executable
|
| + *
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|