summaryrefslogtreecommitdiffstats
path: root/chrome/app/nibs/PRESUBMIT.py
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-20 03:25:11 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-20 03:25:11 +0000
commita87daad928d7d0c80c2dae106ef0ce17d76dcb7a (patch)
tree6716ffb5aa9713f8c3f947889534fc2d16e90183 /chrome/app/nibs/PRESUBMIT.py
parentda1276f7e6ca78beec0fa1c90ac1f7172fc60c8f (diff)
downloadchromium_src-a87daad928d7d0c80c2dae106ef0ce17d76dcb7a.zip
chromium_src-a87daad928d7d0c80c2dae106ef0ce17d76dcb7a.tar.gz
chromium_src-a87daad928d7d0c80c2dae106ef0ce17d76dcb7a.tar.bz2
Re-save XIB files using Xcode 4.4.1 on Mac OS X 10.8.1.
This also adds a PRESUBMIT check to enforce the policy described here: http://dev.chromium.org/developers/design-documents/mac-xib-files BUG=149763 TEST=Build chrome target on 10.6 with Xcode 3.2. Chromium.app launches and works. TBR=mark@chromium.org Review URL: https://chromiumcodereview.appspot.com/10950010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157690 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/app/nibs/PRESUBMIT.py')
-rw-r--r--chrome/app/nibs/PRESUBMIT.py84
1 files changed, 84 insertions, 0 deletions
diff --git a/chrome/app/nibs/PRESUBMIT.py b/chrome/app/nibs/PRESUBMIT.py
new file mode 100644
index 0000000..ffb09d0
--- /dev/null
+++ b/chrome/app/nibs/PRESUBMIT.py
@@ -0,0 +1,84 @@
+# 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 to verify that XIB changes are done with the right version.
+
+See http://dev.chromium.org/developers/design-documents/mac-xib-files for more
+information.
+"""
+
+import re
+
+# Minimum is Mac OS X 10.8.1 (12B19).
+HUMAN_DARWIN_VERSION = '10.8.x, x >= 1'
+ALLOWED_DARWIN_VERSION = 12 # Darwin 12 = 10.8.
+MINIMUM_DARWIN_RELEASE = 'B' # Release B = 10.8.1.
+
+MINIMUM_IB_VERSION = 2549 # Xcode 4.4.1.
+MAXIMUM_IB_VERSION = 2800 # Xcode 4.5.x.
+HUMAN_IB_VERSION = '4.4.x, x >= 1'
+
+SYSTEM_VERSION_RE = r'<string key="IBDocument\.SystemVersion">' + \
+ '([0-9]{,2})([A-Z])([0-9]+)</string>'
+
+IB_VERSION_RE = \
+ r'<string key="IBDocument\.InterfaceBuilderVersion">([0-9]+)</string>'
+
+def _CheckXIBSystemAndXcodeVersions(input_api, output_api, error_type):
+ affected_xibs = [x for x in input_api.AffectedFiles()
+ if x.LocalPath().endswith('.xib')]
+
+ incorrect_system_versions = []
+ incorrect_ib_versions = []
+
+ for xib in affected_xibs:
+ system_version = None
+ ib_version = None
+ for line in xib.NewContents():
+ m = re.search(SYSTEM_VERSION_RE, line)
+ if m:
+ system_version = (m.group(1), m.group(2), m.group(3))
+
+ m = re.search(IB_VERSION_RE, line)
+ if m:
+ ib_version = m.group(1)
+
+ if system_version is not None and ib_version is not None:
+ break
+
+ if system_version is None:
+ incorrect_system_versions.append(xib.LocalPath())
+ continue
+ if int(system_version[0]) != ALLOWED_DARWIN_VERSION:
+ incorrect_system_versions.append(xib.LocalPath())
+ continue
+ if system_version[1] < MINIMUM_DARWIN_RELEASE:
+ incorrect_system_versions.append(xib.LocalPath())
+ continue
+
+ if ib_version is None or int(ib_version) < MINIMUM_IB_VERSION or \
+ int(ib_version) >= MAXIMUM_IB_VERSION:
+ incorrect_ib_versions.append(xib.LocalPath())
+ continue
+
+ problems = []
+ if incorrect_system_versions:
+ problems.append(error_type(
+ 'XIB files need to be saved on Mac OS X ' + HUMAN_DARWIN_VERSION,
+ items=incorrect_system_versions))
+ if incorrect_ib_versions:
+ problems.append(error_type(
+ 'XIB files need to be saved using Xcode ' + HUMAN_IB_VERSION,
+ items=incorrect_ib_versions))
+ return problems
+
+def CheckChangeOnUpload(input_api, output_api):
+ # Allow uploads to happen even if the presubmit fails, so that contributors
+ # can ask their reviewer or another person to re-save the XIBs for them.
+ return _CheckXIBSystemAndXcodeVersions(input_api, output_api,
+ error_type=output_api.PresubmitPromptWarning)
+
+def CheckChangeOnCommit(input_api, output_api):
+ return _CheckXIBSystemAndXcodeVersions(input_api, output_api,
+ error_type=output_api.PresubmitError)