summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/ffmpeg/PRESUBMIT.py
blob: 253e9905585174ac3c8245dd9e0ddd4ac1a33b4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 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 script for FFmpeg repository.

Does the following:
- Displays a message indicating that all changes must be pushed to SVN.
- Prevents changes inside the git-svn and svn repositories.
- Warns users when a change is made without updating the README file.
"""

import re
import subprocess


# Setup some basic ANSI colors.
BOLD_RED = '\033[1;31m'
BOLD_BLUE = '\033[1;34m'


def Color(color, string):
  return ''.join([color, string, '\033[m'])


def _CheckForMainRepository(input_api, output_api):
  """Ensure no commits are allowed to the Subversion repository."""
  try:
    stdout = subprocess.Popen('git config --get remote.origin.url', shell=True,
                              cwd=input_api.PresubmitLocalPath(),
                              stdout=subprocess.PIPE).communicate()[0]
    if 'chromium/third_party/ffmpeg.git' in stdout:
      return []
  except Exception, e:
    # Not everyone has a working Git configuration, so print the exception text
    # and move on.
    print e

  return [output_api.PresubmitError('\n'.join([
      'Commits to the FFmpeg repository must be made through Git. The easiest',
      'way to do this is to switch to using NewGit:\n',
      '   http://code.google.com/p/chromium/wiki/UsingNewGit\n',
      'Alternatively, you can clone the repository directly using:\n',
      '   git clone http://git.chromium.org/chromium/third_party/ffmpeg.git']))]


def _WarnAboutManualSteps():
  """Warn about the manual steps required for rolling the FFmpeg repository."""
  print Color(BOLD_RED, '[ REMEMBER ]'.center(70, '*'))
  print Color(
      BOLD_BLUE, '\n'.join([
          'Updates to FFmpeg require the following additional manual steps:',
          '  - Push of new sources from Git to Subversion. See sync_svn.py.',
          '  - External DEPS roll.',
          '  - If new source files were added, generate_gyp.py must be run.\n',
          'For help, please consult the following resources:',
          '  - chromium/README.chromium help text.',
          '  - Chromium development list: chromium-dev@chromium.org',
          '  - "Communication" section of http://www.chromium.org/developers']))
  print Color(BOLD_RED, 70 * '*')


def _WarnIfReadmeIsUnchanged(input_api, output_api):
  """Warn if the README file hasn't been updated with change notes."""
  readme_re = re.compile(r'.*[/\\]?chromium[/\\]patches[/\\]README$')
  for f in input_api.AffectedFiles():
    if readme_re.match(f.LocalPath()):
      return []

  return [output_api.PresubmitPromptWarning('\n'.join([
      'FFmpeg changes detected without any update to chromium/patches/README,',
      'it\'s good practice to update this file with a note about your changes.'
  ]))]


def CheckChangeOnUpload(input_api, output_api):
  _WarnAboutManualSteps()
  results = []
  results.extend(_CheckForMainRepository(input_api, output_api))
  results.extend(_WarnIfReadmeIsUnchanged(input_api, output_api))
  return results