# 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.9.5 (13F34). HUMAN_DARWIN_VERSION = '10.9.5' ALLOWED_DARWIN_VERSION = 13 # Darwin 13 = 10.9. MINIMUM_DARWIN_RELEASE = 'F' # Release F = 10.9.5. MINIMUM_IB_VERSION = 5053 # Xcode 5.1. MAXIMUM_IB_VERSION = 5056 # Xcode 5.1.1. HUMAN_IB_VERSION = '>= 5.1, <= 5.1.1' SYSTEM_VERSION_RE = r'' 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: if len(xib.NewContents()) == 0: continue system_version = None ib_version = None new_contents = xib.NewContents() if not new_contents: # Deleting files is always fine. continue for line in new_contents: 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 version ' + 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)