OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Generic presubmit checks that can be reused by other presubmit checks.""" | 5 """Generic presubmit checks that can be reused by other presubmit checks.""" |
6 | 6 |
7 import os as _os | 7 import os as _os |
8 _HERE = _os.path.dirname(_os.path.abspath(__file__)) | 8 _HERE = _os.path.dirname(_os.path.abspath(__file__)) |
9 | 9 |
10 # Justifications for each filter: | 10 # Justifications for each filter: |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 cr_files = [] | 154 cr_files = [] |
155 for f in input_api.AffectedSourceFiles(source_file_filter): | 155 for f in input_api.AffectedSourceFiles(source_file_filter): |
156 if '\r' in input_api.ReadFile(f, 'rb'): | 156 if '\r' in input_api.ReadFile(f, 'rb'): |
157 cr_files.append(f.LocalPath()) | 157 cr_files.append(f.LocalPath()) |
158 if cr_files: | 158 if cr_files: |
159 return [output_api.PresubmitPromptWarning( | 159 return [output_api.PresubmitPromptWarning( |
160 'Found a CR character in these files:', items=cr_files)] | 160 'Found a CR character in these files:', items=cr_files)] |
161 return [] | 161 return [] |
162 | 162 |
163 | 163 |
164 def CheckSvnModifiedDirectories(input_api, output_api, source_file_filter=None): | |
165 """Checks for files in svn modified directories. | |
166 | |
167 They will get submitted on accident because svn commits recursively by | |
168 default, and that's very dangerous. | |
169 """ | |
170 if input_api.change.scm != 'svn': | |
171 return [] | |
172 | |
173 errors = [] | |
174 current_cl_files = input_api.change.GetModifiedFiles() | |
175 all_modified_files = input_api.change.GetAllModifiedFiles() | |
176 # Filter out files in the current CL. | |
177 modified_files = [f for f in all_modified_files if f not in current_cl_files] | |
178 modified_abspaths = [input_api.os_path.abspath(f) for f in modified_files] | |
179 | |
180 for f in input_api.AffectedFiles(file_filter=source_file_filter): | |
181 if f.Action() == 'M' and f.IsDirectory(): | |
182 curpath = f.AbsoluteLocalPath() | |
183 bad_files = [] | |
184 # Check if any of the modified files in other CLs are under curpath. | |
185 for i in xrange(len(modified_files)): | |
186 abspath = modified_abspaths[i] | |
187 if input_api.os_path.commonprefix([curpath, abspath]) == curpath: | |
188 bad_files.append(modified_files[i]) | |
189 if bad_files: | |
190 if input_api.is_committing: | |
191 error_type = output_api.PresubmitPromptWarning | |
192 else: | |
193 error_type = output_api.PresubmitNotifyResult | |
194 errors.append(error_type( | |
195 'Potential accidental commits in changelist %s:' % f.LocalPath(), | |
196 items=bad_files)) | |
197 return errors | |
198 | |
199 | |
200 def CheckChangeHasOnlyOneEol(input_api, output_api, source_file_filter=None): | 164 def CheckChangeHasOnlyOneEol(input_api, output_api, source_file_filter=None): |
201 """Checks the files ends with one and only one \n (LF).""" | 165 """Checks the files ends with one and only one \n (LF).""" |
202 eof_files = [] | 166 eof_files = [] |
203 for f in input_api.AffectedSourceFiles(source_file_filter): | 167 for f in input_api.AffectedSourceFiles(source_file_filter): |
204 contents = input_api.ReadFile(f, 'rb') | 168 contents = input_api.ReadFile(f, 'rb') |
205 # Check that the file ends in one and only one newline character. | 169 # Check that the file ends in one and only one newline character. |
206 if len(contents) > 1 and (contents[-1:] != '\n' or contents[-2:-1] == '\n'): | 170 if len(contents) > 1 and (contents[-1:] != '\n' or contents[-2:-1] == '\n'): |
207 eof_files.append(f.LocalPath()) | 171 eof_files.append(f.LocalPath()) |
208 | 172 |
209 if eof_files: | 173 if eof_files: |
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1158 for f in affected_files: | 1122 for f in affected_files: |
1159 cmd = ['gn', 'format', '--dry-run', f.AbsoluteLocalPath()] | 1123 cmd = ['gn', 'format', '--dry-run', f.AbsoluteLocalPath()] |
1160 rc = gn.main(cmd) | 1124 rc = gn.main(cmd) |
1161 if rc == 2: | 1125 if rc == 2: |
1162 warnings.append(output_api.PresubmitPromptWarning( | 1126 warnings.append(output_api.PresubmitPromptWarning( |
1163 '%s requires formatting. Please run `gn format --in-place %s`.' % ( | 1127 '%s requires formatting. Please run `gn format --in-place %s`.' % ( |
1164 f.AbsoluteLocalPath(), f.LocalPath()))) | 1128 f.AbsoluteLocalPath(), f.LocalPath()))) |
1165 # It's just a warning, so ignore other types of failures assuming they'll be | 1129 # It's just a warning, so ignore other types of failures assuming they'll be |
1166 # caught elsewhere. | 1130 # caught elsewhere. |
1167 return warnings | 1131 return warnings |
OLD | NEW |