# Copyright 2012 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Enforces json format.

See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
for more details on the presubmit API built into depot_tools.
"""

PRESUBMIT_VERSION = '2.0.0'


def CheckFreeze(input_api, output_api):
  return input_api.canned_checks.CheckInfraFreeze(
    input_api, output_api, files_to_exclude=['.+/filters/.+']
  )


def CheckSourceSideSpecs(input_api, output_api):
  return input_api.RunTests(
    [
      input_api.Command(
        name='check source side specs',
        cmd=[
          input_api.python3_executable,
          'generate_buildbot_json.py',
          '--check',
          '--verbose',
        ],
        kwargs={},
        message=output_api.PresubmitError,
      ),
    ]
  )


def CheckTests(input_api, output_api):
  for f in input_api.AffectedFiles():
    # If the only files changed here match //testing/buildbot/*.(pyl|json),
    # then we can assume the unit tests are unaffected.
    if len(
      f.LocalPath().split(input_api.os_path.sep)
    ) != 3 or not f.LocalPath().endswith(('.json', '.pyl')):
      break
  else:
    return []
  glob = input_api.os_path.join(input_api.PresubmitLocalPath(), '*test.py')
  tests = input_api.canned_checks.GetUnitTests(
    input_api, output_api, input_api.glob(glob)
  )
  return input_api.RunTests(tests)


def CheckJsonFiles(input_api, output_api):
  return input_api.RunTests(
    [
      input_api.Command(
        name='check JSON files',
        cmd=[input_api.python3_executable, 'check.py'],
        kwargs={},
        message=output_api.PresubmitError,
      ),
    ]
  )


def CheckPylFilesSynced(input_api, output_api):
  return input_api.RunTests(
    [
      input_api.Command(
        name='check-pyl-files-synced',
        cmd=[
          input_api.python3_executable,
          '../../infra/config/scripts/sync-pyl-files.py',
          '--check',
        ],
        kwargs={},
        message=output_api.PresubmitError,
      ),
    ]
  )
