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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """Top-level presubmit script for chromium-build-stats (or go appengine app).
6
7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
8 details on the presubmit API built into gcl.
9 """
10
11 def reporoot(input_api):
12 return input_api.os_path.join(input_api.PresubmitLocalPath(), '..', '..')
13
14 def _go_files(input_api, source_file_filter=None):
15 """Collects affected go source files, but ignores ones generated by protoc."""
16 files = []
17 for f in input_api.AffectedTextFiles(source_file_filter):
18 if not f.LocalPath().endswith('.go'):
19 continue
20 if f.LocalPath().endswith('.pb.go'):
21 continue
22 files.append(f)
23 return files
24
25 def _run_go_tool(input_api, args):
26 cmdline = [input_api.os_path.join(reporoot(input_api), '..',
27 'go_appengine', args[0])]
28 cmdline.extend(args[1:])
29 cwd = reporoot(input_api)
30 p = input_api.subprocess.Popen(cmdline,
31 cwd=cwd,
32 stdout=input_api.subprocess.PIPE,
33 stderr=input_api.subprocess.STDOUT)
34 (out, _) = p.communicate()
35 return (out, p.returncode)
36
37 def _CheckChangeByGoTool(input_api, output_api, source_file_filter=None,
38 go_tool=None):
39 """Checks that all '.go' files pass by go_tool."""
40 tool = ' '.join(go_tool)
41 cmdline = []
42 cmdline.extend(go_tool)
43 items = _go_files(input_api, source_file_filter)
44 files = [f.LocalPath() for f in items]
45 if not len(files):
46 return []
47 cmdline.extend(files)
48 out, ret = _run_go_tool(input_api, cmdline)
49 msg = ""
50 if ret:
51 msg = "Failed to run %s" % tool
52 if out:
53 msg = "\n".join([msg, out])
54 if msg:
55 return [output_api.PresubmitError(msg, items=items)]
56 return []
57
58 def CheckGoTest(input_api, output_api, source_file_filter=None):
59 """Checks that all directories test pass by goapp test."""
60 items = _go_files(input_api, source_file_filter)
61 dirs = set()
62 for f in items:
63 dirs.add(input_api.os_path.join(reporoot(input_api),
64 input_api.os_path.dirname(f.LocalPath())))
65 if not len(dirs):
66 return []
67 result=[]
68 for d in dirs:
69 cmdline = [input_api.os_path.join(reporoot(input_api), '..',
70 'go_appengine', 'goapp')]
71 cmdline.extend(['test'])
72 p = input_api.subprocess.Popen(cmdline,
73 cwd=d,
74 stdout=input_api.subprocess.PIPE,
75 stderr=input_api.subprocess.STDOUT)
76 (out, _) = p.communicate()
77 msg = ""
78 if p.returncode:
79 msg = "Failed to run goapp test in %s" % d
80 if out:
81 msg = "\n".join([msg, out])
82 if msg:
83 result.append(output_api.PresubmitError(msg, items=items))
84 return result
85
86
87 def CheckChangeGoFmtClean(input_api, output_api, source_file_filter=None):
88 return _CheckChangeByGoTool(input_api, output_api,
89 source_file_filter=source_file_filter,
90 go_tool=['gofmt', '-l'])
91
92 def CheckChangeGoVetClean(input_api, output_api, source_file_filter=None):
93 return _CheckChangeByGoTool(input_api, output_api,
94 source_file_filter=source_file_filter,
95 go_tool=['goapp', 'vet'])
96
97
98 def CommonChecks(input_api, output_api):
99 results = []
100 results += input_api.canned_checks.CheckChangeHasDescription(
101 input_api, output_api)
102 results += CheckChangeGoFmtClean(input_api, output_api)
103 results += CheckChangeGoVetClean(input_api, output_api)
104 results += CheckGoTest(input_api, output_api)
105 results += input_api.canned_checks.CheckChangeHasNoCrAndHasOnlyOneEol(
106 input_api, output_api)
107 # go uses TAB.
108 #results += input_api.canned_checks.CheckChangeHasNoTabs(
109 # input_api, output_api)
110 results += input_api.canned_checks.CheckChangeTodoHasOwner(
111 input_api, output_api)
112 results += input_api.canned_checks.CheckChangeHasNoStrayWhitespace(
113 input_api, output_api)
114 # go accepts long lines.
115 #results += input_api.canned_checks.CheckLongLines(input_api, output_api, 80)
116 results += input_api.canned_checks.CheckLicense(
117 input_api, output_api,
118 r'(Copyright 201\d Google Inc. All Rights Reserved.|' +
119 'Copyright.*The Chromium Authors. All rights reserved.)')
120 results += input_api.canned_checks.CheckDoNotSubmit(
121 input_api, output_api)
122 return results
123
124
125 def CheckChangeOnUpload(input_api, output_api):
126 return CommonChecks(input_api, output_api)
127
128
129 def CheckChangeOnCommit(input_api, output_api):
130 output = CommonChecks(input_api, output_api)
131 output.extend(input_api.canned_checks.CheckOwners(input_api, output_api))
132 return output
OLDNEW
« 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