| # Copyright 2015 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| |
| |
| _IGNORE_FREEZE_FOOTER = 'Ignore-Freeze' |
| |
| # The time module's handling of timezones is abysmal, so the boundaries are |
| # precomputed in UNIX time |
| _FREEZE_START = 1671177600 # 2022/12/16 00:00 -0800 |
| _FREEZE_END = 1672646400 # 2023/01/02 00:00 -0800 |
| |
| |
| def CheckFreeze(input_api, output_api): |
| if _FREEZE_START <= input_api.time.time() < _FREEZE_END: |
| footers = input_api.change.GitFootersFromDescription() |
| if _IGNORE_FREEZE_FOOTER not in footers: |
| |
| def convert(t): |
| ts = input_api.time.localtime(t) |
| return input_api.time.strftime('%Y/%m/%d %H:%M %z', ts) |
| |
| # Don't report errors when on the presubmit --all bot or when testing |
| # with presubmit --files. |
| if input_api.no_diffs: |
| report_type = output_api.PresubmitPromptWarning |
| else: |
| report_type = output_api.PresubmitError |
| return [ |
| report_type('There is a prod freeze in effect from {} until {},' |
| ' files in //tools/mb cannot be modified'.format( |
| convert(_FREEZE_START), convert(_FREEZE_END))) |
| ] |
| |
| return [] |
| |
| |
| def CheckTests(input_api, output_api): |
| glob = input_api.os_path.join(input_api.PresubmitLocalPath(), '*_test.py') |
| tests = input_api.canned_checks.GetUnitTests(input_api, output_api, |
| input_api.glob(glob)) |
| return input_api.RunTests(tests) |
| |
| |
| def _CommonChecks(input_api, output_api): |
| tests = [] |
| |
| # Run Pylint over the files in the directory. |
| tests.extend( |
| input_api.canned_checks.GetPylint( |
| input_api, |
| output_api, |
| version='2.7', |
| # pylint complains about Checkfreeze not being defined, its probably |
| # finding a different PRESUBMIT.py. Note that this warning only |
| # appears if the number of Pylint jobs is greater than one. |
| files_to_skip=['PRESUBMIT_test.py'], |
| # Disabling this warning because this pattern involving ToSrcRelPath |
| # seems intrinsic to how mb_unittest.py is implemented. |
| disabled_warnings=[ |
| 'attribute-defined-outside-init', |
| ])) |
| |
| # Run the MB unittests. |
| tests.extend( |
| input_api.canned_checks.GetUnitTestsInDirectory(input_api, output_api, |
| '.', |
| [r'^.+_unittest\.py$'])) |
| |
| # Validate the format of the mb_config.pyl file. |
| cmd = [input_api.python3_executable, 'mb.py', 'validate'] |
| kwargs = {'cwd': input_api.PresubmitLocalPath()} |
| tests.append( |
| input_api.Command(name='mb_validate', |
| cmd=cmd, |
| kwargs=kwargs, |
| message=output_api.PresubmitError)) |
| |
| results = [] |
| results.extend(input_api.RunTests(tests)) |
| results.extend(CheckFreeze(input_api, output_api)) |
| results.extend(CheckTests(input_api, output_api)) |
| |
| return results |
| |
| |
| def CheckChangeOnUpload(input_api, output_api): |
| return _CommonChecks(input_api, output_api) |
| |
| |
| def CheckChangeOnCommit(input_api, output_api): |
| return _CommonChecks(input_api, output_api) |