| # Copyright (c) 2011 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. |
| |
| def _CheckThirdPartyReadmesUpdated(input_api, output_api): |
| """ |
| Checks to make sure that README.chromium files are properly updated |
| when dependancies in third_party are modified. |
| """ |
| readmes = [] |
| files = [] |
| errors = [] |
| for f in input_api.AffectedFiles(): |
| if f.LocalPath().startswith('third_party' + input_api.os_path.sep): |
| files.append(f) |
| if f.LocalPath().endswith("README.chromium"): |
| readmes.append(f) |
| if files and not readmes: |
| errors.append(output_api.PresubmitPromptWarning( |
| 'When updating or adding third party code the appropriate\n' |
| '\'README.chromium\' file should also be updated with the correct\n' |
| 'version and package information.', files)) |
| if not readmes: |
| return errors |
| |
| name_pattern = input_api.re.compile( |
| r'^Name: [a-zA-Z0-9_\-\. \(\)]+\r?$', |
| input_api.re.IGNORECASE | input_api.re.MULTILINE) |
| shortname_pattern = input_api.re.compile( |
| r'^Short Name: [a-zA-Z0-9_\-\.]+\r?$', |
| input_api.re.IGNORECASE | input_api.re.MULTILINE) |
| version_pattern = input_api.re.compile( |
| r'^Version: [a-zA-Z0-9_\-\.:]+\r?$', |
| input_api.re.IGNORECASE | input_api.re.MULTILINE) |
| release_pattern = input_api.re.compile( |
| r'^Security Critical: (yes)|(no)\r?$', |
| input_api.re.IGNORECASE | input_api.re.MULTILINE) |
| license_pattern = input_api.re.compile( |
| r'^License: .+\r?$', |
| input_api.re.IGNORECASE | input_api.re.MULTILINE) |
| |
| for f in readmes: |
| contents = input_api.ReadFile(f) |
| if (not shortname_pattern.search(contents) |
| and not name_pattern.search(contents)): |
| errors.append(output_api.PresubmitError( |
| 'Third party README files should contain either a \'Short Name\' or\n' |
| 'a \'Name\' which is the name under which the package is\n' |
| 'distributed. Check README.chromium.template for details.', |
| [f])) |
| if not version_pattern.search(contents): |
| errors.append(output_api.PresubmitError( |
| 'Third party README files should contain a \'Version\' field.\n' |
| 'If the package is not versioned or the version is not known\n' |
| 'list the version as \'unknown\'.\n' |
| 'Check README.chromium.template for details.', |
| [f])) |
| if not release_pattern.search(contents): |
| errors.append(output_api.PresubmitError( |
| 'Third party README files should contain a \'Security Critical\'\n' |
| 'field. This field specifies whether the package is built with\n' |
| 'Chromium. Check README.chromium.template for details.', |
| [f])) |
| if not license_pattern.search(contents): |
| errors.append(output_api.PresubmitError( |
| 'Third party README files should contain a \'License\' field.\n' |
| 'This field specifies the license used by the package. Check\n' |
| 'README.chromium.template for details.', |
| [f])) |
| return errors |
| |
| |
| def CheckChangeOnUpload(input_api, output_api): |
| results = [] |
| results.extend(_CheckThirdPartyReadmesUpdated(input_api, output_api)) |
| return results |