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

Unified Diff: appengine/chromium_build_stats/PRESUBMIT.py

Issue 467303003: add appengine/chromium_build_stats (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: rebase Created 6 years, 3 months 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 | « appengine/chromium_build_stats/OWNERS ('k') | appengine/chromium_build_stats/README.md » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/chromium_build_stats/PRESUBMIT.py
diff --git a/appengine/chromium_build_stats/PRESUBMIT.py b/appengine/chromium_build_stats/PRESUBMIT.py
new file mode 100644
index 0000000000000000000000000000000000000000..2905bce9ca791ea3450cb575f532d78a7e432663
--- /dev/null
+++ b/appengine/chromium_build_stats/PRESUBMIT.py
@@ -0,0 +1,132 @@
+# Copyright (c) 2014 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.
+
+"""Top-level presubmit script for chromium-build-stats (or go appengine app).
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
+details on the presubmit API built into gcl.
+"""
+
+def reporoot(input_api):
+ return input_api.os_path.join(input_api.PresubmitLocalPath(), '..', '..')
+
+def _go_files(input_api, source_file_filter=None):
+ """Collects affected go source files, but ignores ones generated by protoc."""
+ files = []
+ for f in input_api.AffectedTextFiles(source_file_filter):
+ if not f.LocalPath().endswith('.go'):
+ continue
+ if f.LocalPath().endswith('.pb.go'):
+ continue
+ files.append(f)
+ return files
+
+def _run_go_tool(input_api, args):
+ cmdline = [input_api.os_path.join(reporoot(input_api), '..',
+ 'go_appengine', args[0])]
+ cmdline.extend(args[1:])
+ cwd = reporoot(input_api)
+ p = input_api.subprocess.Popen(cmdline,
+ cwd=cwd,
+ stdout=input_api.subprocess.PIPE,
+ stderr=input_api.subprocess.STDOUT)
+ (out, _) = p.communicate()
+ return (out, p.returncode)
+
+def _CheckChangeByGoTool(input_api, output_api, source_file_filter=None,
+ go_tool=None):
+ """Checks that all '.go' files pass by go_tool."""
+ tool = ' '.join(go_tool)
+ cmdline = []
+ cmdline.extend(go_tool)
+ items = _go_files(input_api, source_file_filter)
+ files = [f.LocalPath() for f in items]
+ if not len(files):
+ return []
+ cmdline.extend(files)
+ out, ret = _run_go_tool(input_api, cmdline)
+ msg = ""
+ if ret:
+ msg = "Failed to run %s" % tool
+ if out:
+ msg = "\n".join([msg, out])
+ if msg:
+ return [output_api.PresubmitError(msg, items=items)]
+ return []
+
+def CheckGoTest(input_api, output_api, source_file_filter=None):
+ """Checks that all directories test pass by goapp test."""
+ items = _go_files(input_api, source_file_filter)
+ dirs = set()
+ for f in items:
+ dirs.add(input_api.os_path.join(reporoot(input_api),
+ input_api.os_path.dirname(f.LocalPath())))
+ if not len(dirs):
+ return []
+ result=[]
+ for d in dirs:
+ cmdline = [input_api.os_path.join(reporoot(input_api), '..',
+ 'go_appengine', 'goapp')]
+ cmdline.extend(['test'])
+ p = input_api.subprocess.Popen(cmdline,
+ cwd=d,
+ stdout=input_api.subprocess.PIPE,
+ stderr=input_api.subprocess.STDOUT)
+ (out, _) = p.communicate()
+ msg = ""
+ if p.returncode:
+ msg = "Failed to run goapp test in %s" % d
+ if out:
+ msg = "\n".join([msg, out])
+ if msg:
+ result.append(output_api.PresubmitError(msg, items=items))
+ return result
+
+
+def CheckChangeGoFmtClean(input_api, output_api, source_file_filter=None):
+ return _CheckChangeByGoTool(input_api, output_api,
+ source_file_filter=source_file_filter,
+ go_tool=['gofmt', '-l'])
+
+def CheckChangeGoVetClean(input_api, output_api, source_file_filter=None):
+ return _CheckChangeByGoTool(input_api, output_api,
+ source_file_filter=source_file_filter,
+ go_tool=['goapp', 'vet'])
+
+
+def CommonChecks(input_api, output_api):
+ results = []
+ results += input_api.canned_checks.CheckChangeHasDescription(
+ input_api, output_api)
+ results += CheckChangeGoFmtClean(input_api, output_api)
+ results += CheckChangeGoVetClean(input_api, output_api)
+ results += CheckGoTest(input_api, output_api)
+ results += input_api.canned_checks.CheckChangeHasNoCrAndHasOnlyOneEol(
+ input_api, output_api)
+ # go uses TAB.
+ #results += input_api.canned_checks.CheckChangeHasNoTabs(
+ # input_api, output_api)
+ results += input_api.canned_checks.CheckChangeTodoHasOwner(
+ input_api, output_api)
+ results += input_api.canned_checks.CheckChangeHasNoStrayWhitespace(
+ input_api, output_api)
+ # go accepts long lines.
+ #results += input_api.canned_checks.CheckLongLines(input_api, output_api, 80)
+ results += input_api.canned_checks.CheckLicense(
+ input_api, output_api,
+ r'(Copyright 201\d Google Inc. All Rights Reserved.|' +
+ 'Copyright.*The Chromium Authors. All rights reserved.)')
+ results += input_api.canned_checks.CheckDoNotSubmit(
+ input_api, output_api)
+ return results
+
+
+def CheckChangeOnUpload(input_api, output_api):
+ return CommonChecks(input_api, output_api)
+
+
+def CheckChangeOnCommit(input_api, output_api):
+ output = CommonChecks(input_api, output_api)
+ output.extend(input_api.canned_checks.CheckOwners(input_api, output_api))
+ return output
« no previous file with comments | « appengine/chromium_build_stats/OWNERS ('k') | appengine/chromium_build_stats/README.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698