Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Unified Diff: ROOT_PRESUBMIT.py

Issue 5776001: Add prebuilt and codereview.settings to chromiumos-overlay (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/chromiumos-overlay.git@master
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | codereview.settings » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ROOT_PRESUBMIT.py
diff --git a/ROOT_PRESUBMIT.py b/ROOT_PRESUBMIT.py
new file mode 100644
index 0000000000000000000000000000000000000000..f59b7f5fe08c5e147cccccf2b96d35858b23c074
--- /dev/null
+++ b/ROOT_PRESUBMIT.py
@@ -0,0 +1,212 @@
+# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Top-level presubmit script for Chromium OS.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into gcl and git cl.
+"""
+
+import re
+
+_EXCLUDED_PATHS = (
+ r"^inherit-review-settings-ok$",
+ r".*[\\\/]debian[\\\/]rules$",
+)
+
+# These match files that should contain tabs as indentation.
+_TAB_OK_PATHS = (
+ r"/src/third_party/kernel/",
+ r"/src/third_party/kernel-next/",
+ r"/src/third_party/u-boot/",
+ r"/src/third_party/u-boot-next/",
+ r".*\.ebuild$",
+ r".*\.eclass$",
+)
+
+# These match files that are part of out "next" developemnt flow and as such
+# do not require a valid BUG= field to commit, but it's still a good idea.
+_NEXT_PATHS = (
+ r"/src/third_party/kernel-next",
+ r"/src/third_party/u-boot-next",
+)
+
+_LICENSE_HEADER = (
+ r".*? Copyright \(c\) 20[-0-9]{2,7} The Chromium OS Authors\. All rights "
+ r"reserved\." "\n"
+ r".*? Use of this source code is governed by a BSD-style license that can "
+ "be\n"
+ r".*? found in the LICENSE file\."
+ "\n"
+)
+
+
+def CheckAndShowLicense(input_api, output_api, source_file_filter=None):
+ """Check that the source files have a valid License header.
+
+ The license header must matches our template. If not also show the
+ header that should have been used.
+
+ """
+ results = []
+ license_check = input_api.canned_checks.CheckLicense(
+ input_api, output_api, _LICENSE_HEADER, source_file_filter)
+ results.extend(license_check)
+ if license_check:
+ results.extend([output_api.PresubmitNotifyResult(
+ "License header should match the following:",
+ long_text=_LICENSE_HEADER)])
+ return results
+
+
+def CheckChangeHasMandatoryBugField(input_api,
+ output_api,
+ source_file_filter=None):
+ """Check that the commit contains a valid BUG= field."""
+ msg = ('Changelist must reference a bug number using BUG=\n'
+ 'For example, BUG=chromium-os:8205\n'
+ 'BUG=none is not allowed.')
+
+ if (not input_api.AffectedSourceFiles(source_file_filter) or
+ (input_api.change.BUG and re.search(r"\d", input_api.change.BUG))):
+ return []
+ else:
+ return [output_api.PresubmitError(msg)]
+
+
+def CheckChangeHasBugField(input_api, output_api, source_file_filter=None):
+ # This function is required because the canned BugField check doesn't
+ # take a source filter.
+ return input_api.canned_checks.CheckChangeHasBugField(input_api,
+ output_api)
+
+
+def CheckChangeHasTestField(input_api, output_api, source_file_filter=None):
+ # This function is required because the canned TestField check doesn't
+ # take a source filter.
+ return input_api.canned_checks.CheckChangeHasTestField(input_api,
+ output_api)
+
+
+def CheckTreeIsOpen(input_api, output_api, source_file_filter=None):
+ """Make sure the tree is 'open'. If not, don't submit."""
+ return input_api.canned_checks.CheckTreeIsOpen(
+ input_api,
+ output_api,
+ 'http://chromiumos-status.appspot.com/current?format=raw',
+ '.*closed.*')
+
+
+def CheckBuildbotPendingBuilds(input_api, output_api, source_file_filter=None):
+ """Check to see if there's a backlog on the pending CL queue"""
+ return input_api.canned_checks.CheckBuildbotPendingBuilds(
+ input_api,
+ output_api,
+ 'http://build.chromium.org/buildbot/chromiumos/json/builders?filter=1',
+ 6,
+ [])
+
+
+def FilterAbsoluteSourceFile(input_api, affected_file, white_list, black_list):
+ """Filters out files that aren't considered "source file".
+
+ The lists will be compiled as regular expression and
+ AffectedFile.AbsoluteLocalPath() needs to pass both list.
+
+ Note: This function was coppied from presubmit_support.py and modified to
+ check against (AbsoluteLocalPath - PresubmitLocalPath) instead of LocalPath
+ because LocalPath doesn't contain enough information to disambiguate kernel,
+ u-boot and -next files from the rest of ChromiumOS.
+
+ """
+ presubmit_local_path = input_api.PresubmitLocalPath()
+
+ def RelativePath(affected_file):
+ absolute_local_path = affected_file.AbsoluteLocalPath()
+
+ assert absolute_local_path.startswith(presubmit_local_path)
+ return absolute_local_path[len(presubmit_local_path):]
+
+ def Find(relative_path, items):
+ for item in items:
+ if re.match(item, relative_path):
+ return True
+
+ return False
+
+ relative_path = RelativePath(affected_file)
+
+ return (Find(relative_path, white_list) and
+ not Find(relative_path, black_list))
+
+def RunChecklist(input_api, output_api, checklist):
+ """Run through a set of checks provided in a checklist.
+
+ The checklist is a list of tuples, each of which contains the check to run
+ and a list of regular expressions of paths to ignore for this check
+
+ """
+ results = []
+
+ for check, paths in checklist:
+ white_list = input_api.DEFAULT_WHITE_LIST
+
+ # Construct a black list from the DEFAULT_BLACK_LIST supplied by
+ # depot_tools and the paths that this check should not be applied to.
+ #
+ # We also remove the third_party rule here because our paterns are
+ # matching against the entire path from the root of the ChromiumOS
+ # project. We use the rooted paths because we want to be able to apply
+ # some of the presubmit checks to things like the kernel and u-boot that
+ # live in the third_party directory.
+ black_list = list(input_api.DEFAULT_BLACK_LIST)
+ black_list.remove(r".*\bthird_party[\\\/].*")
+ black_list.extend(paths)
+ sources = lambda path: FilterAbsoluteSourceFile(input_api,
+ path,
+ white_list,
+ black_list)
+ results.extend(check(input_api, output_api, source_file_filter=sources))
+
+ return results
+
+
+def MakeCommonChecklist(input_api):
+ return [(input_api.canned_checks.CheckLongLines, _EXCLUDED_PATHS),
+ (input_api.canned_checks.CheckChangeHasNoStrayWhitespace,
+ _EXCLUDED_PATHS),
+ (CheckChangeHasTestField, _EXCLUDED_PATHS),
+ (CheckAndShowLicense, _EXCLUDED_PATHS),
+ (input_api.canned_checks.CheckChangeHasNoTabs,
+ _EXCLUDED_PATHS + _TAB_OK_PATHS)]
+
+
+def MakeUploadChecklist(input_api):
+ return [(CheckChangeHasBugField, _EXCLUDED_PATHS)]
+
+
+def MakeCommitChecklist(input_api):
+ return [(CheckChangeHasMandatoryBugField, _EXCLUDED_PATHS + _NEXT_PATHS),
+ (CheckTreeIsOpen, _EXCLUDED_PATHS),
+ (CheckBuildbotPendingBuilds, _EXCLUDED_PATHS)]
+
+
+def CheckChangeOnUpload(input_api, output_api):
+ """On upload we check against the common and upload lists."""
+ return RunChecklist(input_api,
+ output_api,
+ MakeCommonChecklist(input_api) +
+ MakeUploadChecklist(input_api))
+
+
+def CheckChangeOnCommit(input_api, output_api):
+ """On commit we check against the common and commit lists."""
+ return RunChecklist(input_api,
+ output_api,
+ MakeCommonChecklist(input_api) +
+ MakeCommitChecklist(input_api))
+
+
+def GetPreferredTrySlaves():
+ return ['ChromiumOS x86']
« no previous file with comments | « no previous file | codereview.settings » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698