blob: 055131e62a0e7536b8ea4cf98693dc22005e6c04 [file] [log] [blame]
# Copyright 2018 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.
import sys
def IsNewer(old_version, new_version):
return (old_version and new_version and
(old_version.major < new_version.major or
(old_version.major == new_version.major and
old_version.minor < new_version.minor)))
def CheckVersionAndAssetParity(input_api, output_api):
"""Checks that
- the version was upraded if assets files were changed,
- the version was not downgraded,
- both the google_chrome and the chromium assets have the same files.
"""
sys.path.append(input_api.PresubmitLocalPath())
import parse_version
old_version = None
new_version = None
changed_assets = False
changed_version = False
changed_component_list = False
changed_asset_files = {'google_chrome': [], 'chromium': []}
for file in input_api.AffectedFiles():
basename = input_api.os_path.basename(file.LocalPath())
extension = input_api.os_path.splitext(basename)[1][1:].strip().lower()
basename_without_extension = input_api.os_path.splitext(basename)[
0].strip().lower()
if extension == 'sha1':
basename_without_extension = input_api.os_path.splitext(
basename_without_extension)[0]
dirname = input_api.os_path.basename(
input_api.os_path.dirname(file.LocalPath()))
action = file.Action()
if (dirname in changed_asset_files and
extension in {'sha1', 'png', 'wav'} and action in {'A', 'D'}):
changed_asset_files[dirname].append((action, basename_without_extension))
if (extension == 'sha1' or basename == 'vr_assets_component_files.json'):
changed_assets = True
if basename == 'vr_assets_component_files.json':
changed_component_list = True
if basename == 'VERSION':
changed_version = True
old_version = parse_version.ParseVersion(file.OldContents())
new_version = parse_version.ParseVersion(file.NewContents())
local_version_filename = input_api.os_path.join(
input_api.os_path.dirname(input_api.AffectedFiles()[0].LocalPath()),
'VERSION')
local_component_list_filename = input_api.os_path.join(
input_api.os_path.dirname(input_api.AffectedFiles()[0].LocalPath()),
'vr_assets_component_files.json')
if changed_asset_files['google_chrome'] != changed_asset_files['chromium']:
return [
output_api.PresubmitError(
'Must have same asset files for %s in \'%s\'.' %
(changed_asset_files.keys(),
input_api.os_path.dirname(
input_api.AffectedFiles()[0].LocalPath())))
]
if changed_asset_files['google_chrome'] and not changed_component_list:
return [
output_api.PresubmitError(
'Must update \'%s\' if adding/removing assets.' %
local_component_list_filename)
]
if changed_version and (not old_version or not new_version):
return [
output_api.PresubmitError(
'Cannot parse version in \'%s\'.' % local_version_filename)
]
version_upgraded = IsNewer(old_version, new_version)
if changed_assets and not version_upgraded:
return [
output_api.PresubmitError(
'Must increment version in \'%s\' when '
'updating VR assets.' % local_version_filename)
]
if changed_version and not version_upgraded:
return [
output_api.PresubmitError(
'Must not downgrade version in \'%s\'.' % local_version_filename)
]
return []
def CheckChangeOnUpload(input_api, output_api):
return CheckVersionAndAssetParity(input_api, output_api)
def CheckChangeOnCommit(input_api, output_api):
return CheckVersionAndAssetParity(input_api, output_api)