# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import os


def _LicenseHeader(input_api):
  """Returns the license header regexp."""
  # Accept any year number from 2003 to the current year
  current_year = int(input_api.time.strftime('%Y'))
  allowed_years = (str(s) for s in reversed(xrange(2003, current_year + 1)))
  years_re = '(' + '|'.join(allowed_years) + ')'
  license_header = (
      r'.*? Copyright( \(c\))? %(year)s The WebRTC [Pp]roject [Aa]uthors\. '
        r'All [Rr]ights [Rr]eserved\.\n'
      r'.*?\n'
      r'.*? Use of this source code is governed by a BSD-style license\n'
      r'.*? that can be found in the LICENSE file in the root of the source\n'
      r'.*? tree\. An additional intellectual property rights grant can be '
        r'found\n'
      r'.*? in the file PATENTS\.  All contributing project authors may\n'
      r'.*? be found in the AUTHORS file in the root of the source tree\.\n'
  ) % {
      'year': years_re,
  }
  return license_header

def _CheckValgrindFiles(input_api, output_api):
  """Check that valgrind-webrtc.gni contains all existing files."""
  valgrind_dir = os.path.join('tools_webrtc', 'valgrind')
  with open(os.path.join('valgrind', 'valgrind-webrtc.gni')) as f:
    valgrind_webrtc = f.read()

  results = []
  for f in input_api.AffectedFiles():
    f = f.LocalPath()
    if (f.startswith(valgrind_dir)
        and f not in valgrind_webrtc
        and not f.endswith('valgrind-webrtc.gni')):
      results.append(' * %s\n' % f)

  if results:
    results = [output_api.PresubmitError(
      'The following files are not listed in '
      'tools_webrtc/valgrind/valgrind-webrt.gni. Please add them, so they can '
      'be isolated and uploaded to swarming:\n' +
      ''.join(file_path for file_path in results))]
  return results

def _CommonChecks(input_api, output_api):
  """Checks common to both upload and commit."""
  results = []
  results.extend(input_api.canned_checks.CheckLicense(
      input_api, output_api, _LicenseHeader(input_api)))
  results.extend(_CheckValgrindFiles(input_api, output_api))
  return results

def CheckChangeOnUpload(input_api, output_api):
  results = []
  results.extend(_CommonChecks(input_api, output_api))
  return results

def CheckChangeOnCommit(input_api, output_api):
  results = []
  results.extend(_CommonChecks(input_api, output_api))
  return results

# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import os


def _LicenseHeader(input_api):
  """Returns the license header regexp."""
  # Accept any year number from 2003 to the current year
  current_year = int(input_api.time.strftime('%Y'))
  allowed_years = (str(s) for s in reversed(xrange(2003, current_year + 1)))
  years_re = '(' + '|'.join(allowed_years) + ')'
  license_header = (
      r'.*? Copyright( \(c\))? %(year)s The WebRTC [Pp]roject [Aa]uthors\. '
        r'All [Rr]ights [Rr]eserved\.\n'
      r'.*?\n'
      r'.*? Use of this source code is governed by a BSD-style license\n'
      r'.*? that can be found in the LICENSE file in the root of the source\n'
      r'.*? tree\. An additional intellectual property rights grant can be '
        r'found\n'
      r'.*? in the file PATENTS\.  All contributing project authors may\n'
      r'.*? be found in the AUTHORS file in the root of the source tree\.\n'
  ) % {
      'year': years_re,
  }
  return license_header

def _CheckValgrindFiles(input_api, output_api):
  """Check that valgrind-webrtc.gni contains all existing files."""
  valgrind_dir = os.path.join('tools_webrtc', 'valgrind')
  with open(os.path.join('valgrind', 'valgrind-webrtc.gni')) as f:
    valgrind_webrtc = f.read()

  results = []
  for f in input_api.AffectedFiles():
    f = f.LocalPath()
    if (f.startswith(valgrind_dir)
        and f not in valgrind_webrtc
        and not f.endswith('valgrind-webrtc.gni')):
      results.append(' * %s\n' % f)

  if results:
    results = [output_api.PresubmitError(
      'The following files are not listed in '
      'tools_webrtc/valgrind/valgrind-webrt.gni. Please add them, so they can '
      'be isolated and uploaded to swarming:\n' +
      ''.join(file_path for file_path in results))]
  return results

def _CommonChecks(input_api, output_api):
  """Checks common to both upload and commit."""
  results = []
  results.extend(input_api.canned_checks.CheckLicense(
      input_api, output_api, _LicenseHeader(input_api)))
  results.extend(_CheckValgrindFiles(input_api, output_api))
  return results

def CheckChangeOnUpload(input_api, output_api):
  results = []
  results.extend(_CommonChecks(input_api, output_api))
  return results

def CheckChangeOnCommit(input_api, output_api):
  results = []
  results.extend(_CommonChecks(input_api, output_api))
  return results

# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. # # Use of this source code is governed by a BSD-style license # that can be found in the LICENSE file in the root of the source # tree. An additional intellectual property rights grant can be found # in the file PATENTS.  All contributing project authors may # be found in the AUTHORS file in the root of the source tree. Returns the license header regexp. # Accept any year number from 2003 to the current year Check that valgrind-webrtc.gni contains all existing files. Checks common to both upload and commit.