158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)import subprocess
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)def _CheckSphinxBuild(input_api, output_api):
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  """Check that the docs are buildable without any warnings.
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  This check runs sphinx-build with -W so that warning are errors.
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  However, since the trybots don't have sphinx installed, we'll treat a sphinx
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  failure as a warning. (Let's trust that the docs editors are testing locally.)
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  """
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  try:
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    subprocess.check_output(['make', 'presubmit', 'SPHINXOPTS=-Wa'],
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                            stderr=subprocess.STDOUT)
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  except subprocess.CalledProcessError as e:
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return [output_api.PresubmitNotifyResult('sphinx_build failed:\n' +
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            e.output)]
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return []
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)def CommonChecks(input_api, output_api):
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  output = []
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  output.extend(_CheckSphinxBuild(input_api, output_api))
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return output
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)def CheckChangeOnUpload(input_api, output_api):
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return CommonChecks(input_api, output_api)
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)def CheckChangeOnCommit(input_api, output_api):
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return CommonChecks(input_api, output_api)
38