OLD | NEW |
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013 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 | 5 |
6 """Top-level presubmit script for Skia. | 6 """Top-level presubmit script for Skia. |
7 | 7 |
8 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts | 8 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts |
9 for more details about the presubmit API built into gcl. | 9 for more details about the presubmit API built into gcl. |
10 """ | 10 """ |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 'one of: %s' % str(PUBLIC_API_OWNERS))) | 241 'one of: %s' % str(PUBLIC_API_OWNERS))) |
242 return results | 242 return results |
243 | 243 |
244 | 244 |
245 def PostUploadHook(cl, change, output_api): | 245 def PostUploadHook(cl, change, output_api): |
246 """git cl upload will call this hook after the issue is created/modified. | 246 """git cl upload will call this hook after the issue is created/modified. |
247 | 247 |
248 This hook does the following: | 248 This hook does the following: |
249 * Adds a link to preview docs changes if there are any docs changes in the CL. | 249 * Adds a link to preview docs changes if there are any docs changes in the CL. |
250 * Adds 'NOTRY=true' if the CL contains only docs changes. | 250 * Adds 'NOTRY=true' if the CL contains only docs changes. |
| 251 * Adds 'NOTREECHECKS=true' for non master branch changes since they do not |
| 252 need to be gated on the master branch's tree. |
| 253 * Adds 'NOTRY=true' for non master branch changes since trybots do not yet |
| 254 work on them. |
251 """ | 255 """ |
252 | 256 |
253 results = [] | 257 results = [] |
254 atleast_one_docs_change = False | 258 atleast_one_docs_change = False |
255 all_docs_changes = True | 259 all_docs_changes = True |
256 for affected_file in change.AffectedFiles(): | 260 for affected_file in change.AffectedFiles(): |
257 affected_file_path = affected_file.LocalPath() | 261 affected_file_path = affected_file.LocalPath() |
258 file_path, _ = os.path.splitext(affected_file_path) | 262 file_path, _ = os.path.splitext(affected_file_path) |
259 if 'site' == file_path.split(os.path.sep)[0]: | 263 if 'site' == file_path.split(os.path.sep)[0]: |
260 atleast_one_docs_change = True | 264 atleast_one_docs_change = True |
261 else: | 265 else: |
262 all_docs_changes = False | 266 all_docs_changes = False |
263 if atleast_one_docs_change and not all_docs_changes: | 267 if atleast_one_docs_change and not all_docs_changes: |
264 break | 268 break |
265 | 269 |
266 issue = cl.issue | 270 issue = cl.issue |
267 rietveld_obj = cl.RpcServer() | 271 rietveld_obj = cl.RpcServer() |
268 if issue and rietveld_obj: | 272 if issue and rietveld_obj: |
269 original_description = rietveld_obj.get_description(issue) | 273 original_description = rietveld_obj.get_description(issue) |
270 new_description = original_description | 274 new_description = original_description |
271 | 275 |
272 # If the change includes only doc changes then add NOTRY=true in the | 276 # If the change includes only doc changes then add NOTRY=true in the |
273 # CL's description if it does not exist yet. | 277 # CL's description if it does not exist yet. |
274 if all_docs_changes and not re.search( | 278 if all_docs_changes and not re.search( |
275 r'^NOTRY=true$', original_description, re.M | re.I): | 279 r'^NOTRY=true$', new_description, re.M | re.I): |
276 new_description += '\nNOTRY=true' | 280 new_description += '\nNOTRY=true' |
277 results.append( | 281 results.append( |
278 output_api.PresubmitNotifyResult( | 282 output_api.PresubmitNotifyResult( |
279 'This change has only doc changes. Automatically added ' | 283 'This change has only doc changes. Automatically added ' |
280 '\'NOTRY=true\' to the CL\'s description')) | 284 '\'NOTRY=true\' to the CL\'s description')) |
281 | 285 |
282 # If there is atleast one docs change then add preview link in the CL's | 286 # If there is atleast one docs change then add preview link in the CL's |
283 # description if it does not already exist there. | 287 # description if it does not already exist there. |
284 if atleast_one_docs_change and not re.search( | 288 if atleast_one_docs_change and not re.search( |
285 r'^DOCS_PREVIEW=.*', original_description, re.M | re.I): | 289 r'^DOCS_PREVIEW=.*', new_description, re.M | re.I): |
286 # Automatically add a link to where the docs can be previewed. | 290 # Automatically add a link to where the docs can be previewed. |
287 new_description += '\nDOCS_PREVIEW= %s%s' % (DOCS_PREVIEW_URL, issue) | 291 new_description += '\nDOCS_PREVIEW= %s%s' % (DOCS_PREVIEW_URL, issue) |
288 results.append( | 292 results.append( |
289 output_api.PresubmitNotifyResult( | 293 output_api.PresubmitNotifyResult( |
290 'Automatically added a link to preview the docs changes to the ' | 294 'Automatically added a link to preview the docs changes to the ' |
291 'CL\'s description')) | 295 'CL\'s description')) |
292 | 296 |
| 297 # If the target ref is not master then add NOTREECHECKS=true and NOTRY=true |
| 298 # to the CL's description if it does not already exist there. |
| 299 target_ref = rietveld_obj.get_issue_properties(issue, False).get( |
| 300 'target_ref', '') |
| 301 if target_ref != 'refs/heads/master': |
| 302 if not re.search( |
| 303 r'^NOTREECHECKS=true$', new_description, re.M | re.I): |
| 304 new_description += "\nNOTREECHECKS=true" |
| 305 results.append( |
| 306 output_api.PresubmitNotifyResult( |
| 307 'Branch changes do not need to rely on the master branch\'s ' |
| 308 'tree status. Automatically added \'NOTREECHECKS=true\' to the ' |
| 309 'CL\'s description')) |
| 310 if not re.search( |
| 311 r'^NOTRY=true$', new_description, re.M | re.I): |
| 312 new_description += "\nNOTRY=true" |
| 313 results.append( |
| 314 output_api.PresubmitNotifyResult( |
| 315 'Trybots do not yet work for non-master branches. ' |
| 316 'Automatically added \'NOTRY=true\' to the CL\'s description')) |
| 317 |
| 318 |
293 # If the description has changed update it. | 319 # If the description has changed update it. |
294 if new_description != original_description: | 320 if new_description != original_description: |
295 rietveld_obj.update_description(issue, new_description) | 321 rietveld_obj.update_description(issue, new_description) |
296 | 322 |
297 return results | 323 return results |
298 | 324 |
299 | 325 |
300 def CheckChangeOnCommit(input_api, output_api): | 326 def CheckChangeOnCommit(input_api, output_api): |
301 """Presubmit checks for the change on commit. | 327 """Presubmit checks for the change on commit. |
302 | 328 |
303 The following are the presubmit checks: | 329 The following are the presubmit checks: |
304 * Check change has one and only one EOL. | 330 * Check change has one and only one EOL. |
305 * Ensures that the Skia tree is open in | 331 * Ensures that the Skia tree is open in |
306 http://skia-tree-status.appspot.com/. Shows a warning if it is in 'Caution' | 332 http://skia-tree-status.appspot.com/. Shows a warning if it is in 'Caution' |
307 state and an error if it is in 'Closed' state. | 333 state and an error if it is in 'Closed' state. |
308 """ | 334 """ |
309 results = [] | 335 results = [] |
310 results.extend(_CommonChecks(input_api, output_api)) | 336 results.extend(_CommonChecks(input_api, output_api)) |
311 results.extend( | 337 results.extend( |
312 _CheckTreeStatus(input_api, output_api, json_url=( | 338 _CheckTreeStatus(input_api, output_api, json_url=( |
313 SKIA_TREE_STATUS_URL + '/banner-status?format=json'))) | 339 SKIA_TREE_STATUS_URL + '/banner-status?format=json'))) |
314 results.extend(_CheckLGTMsForPublicAPI(input_api, output_api)) | 340 results.extend(_CheckLGTMsForPublicAPI(input_api, output_api)) |
315 results.extend(_CheckOwnerIsInAuthorsFile(input_api, output_api)) | 341 results.extend(_CheckOwnerIsInAuthorsFile(input_api, output_api)) |
316 return results | 342 return results |
OLD | NEW |