#!/usr/bin/env python3
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.


"""Presubmit checks for the Skia infrastructure code."""

USE_PYTHON3 = True

def _RunPresubmitsWithBazelisk(input_api, output_api, extra_arg):
  """Run presubmit.go via bazelisk. Fail if it returns a non-zero exit code."""
  command = ['bazelisk', 'run', '--config=mayberemote', '//cmd/presubmit', '--', extra_arg]
  command_str = ' '.join(command)
  results = []

  print('Running "%s" ...' % command_str)
  try:
    input_api.subprocess.check_output(
        command,
        stderr=input_api.subprocess.STDOUT,
        encoding='utf-8')
  except input_api.subprocess.CalledProcessError as e:
    results += [output_api.PresubmitPromptWarning(
        'Command "%s" returned non-zero exit code %d. Output: \n\n%s' % (
            command_str,
            e.returncode,
            e.output,
        )
    )]

  return results


def CheckChangeOnUpload(input_api, output_api):
  return _RunPresubmitsWithBazelisk(input_api, output_api, '--upload')


def CheckChangeOnCommit(input_api, output_api):
  return _RunPresubmitsWithBazelisk(input_api, output_api, '--commit')
