1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 """Presubmit script to verify that XIB changes are done with the right version.
7 See http://dev.chromium.org/developers/design-documents/mac-xib-files for more
13 # Minimum is Mac OS X 10.8.1 (12B19).
14 HUMAN_DARWIN_VERSION
= '10.8.x, x >= 1'
15 ALLOWED_DARWIN_VERSION
= 12 # Darwin 12 = 10.8.
16 MINIMUM_DARWIN_RELEASE
= 'B' # Release B = 10.8.1.
18 MINIMUM_IB_VERSION
= 2549 # Xcode 4.4.1.
19 MAXIMUM_IB_VERSION
= 3084 # Xcode 4.6.x.
20 HUMAN_IB_VERSION
= '>= 4.4.1, <= 4.6.x'
22 SYSTEM_VERSION_RE
= r
'<string key="IBDocument\.SystemVersion">' + \
23 '([0-9]{,2})([A-Z])([0-9]+)</string>'
26 r
'<string key="IBDocument\.InterfaceBuilderVersion">([0-9]+)</string>'
28 def _CheckXIBSystemAndXcodeVersions(input_api
, output_api
, error_type
):
29 affected_xibs
= [x
for x
in input_api
.AffectedFiles()
30 if x
.LocalPath().endswith('.xib')]
32 incorrect_system_versions
= []
33 incorrect_ib_versions
= []
35 for xib
in affected_xibs
:
36 if len(xib
.NewContents()) == 0:
42 new_contents
= xib
.NewContents()
44 # Deleting files is always fine.
47 for line
in new_contents
:
48 m
= re
.search(SYSTEM_VERSION_RE
, line
)
50 system_version
= (m
.group(1), m
.group(2), m
.group(3))
52 m
= re
.search(IB_VERSION_RE
, line
)
54 ib_version
= m
.group(1)
56 if system_version
is not None and ib_version
is not None:
59 if system_version
is None:
60 incorrect_system_versions
.append(xib
.LocalPath())
62 if int(system_version
[0]) != ALLOWED_DARWIN_VERSION
:
63 incorrect_system_versions
.append(xib
.LocalPath())
65 if system_version
[1] < MINIMUM_DARWIN_RELEASE
:
66 incorrect_system_versions
.append(xib
.LocalPath())
69 if ib_version
is None or int(ib_version
) < MINIMUM_IB_VERSION
or \
70 int(ib_version
) > MAXIMUM_IB_VERSION
:
71 incorrect_ib_versions
.append(xib
.LocalPath())
75 if incorrect_system_versions
:
76 problems
.append(error_type(
77 'XIB files need to be saved on Mac OS X ' + HUMAN_DARWIN_VERSION
,
78 items
=incorrect_system_versions
))
79 if incorrect_ib_versions
:
80 problems
.append(error_type(
81 'XIB files need to be saved using Xcode version ' + HUMAN_IB_VERSION
,
82 items
=incorrect_ib_versions
))
85 def CheckChangeOnUpload(input_api
, output_api
):
86 # Allow uploads to happen even if the presubmit fails, so that contributors
87 # can ask their reviewer or another person to re-save the XIBs for them.
88 return _CheckXIBSystemAndXcodeVersions(input_api
, output_api
,
89 error_type
=output_api
.PresubmitPromptWarning
)
91 def CheckChangeOnCommit(input_api
, output_api
):
92 return _CheckXIBSystemAndXcodeVersions(input_api
, output_api
,
93 error_type
=output_api
.PresubmitError
)