OLD | NEW |
---|---|
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Generic presubmit checks that can be reused by other presubmit checks.""" | 5 """Generic presubmit checks that can be reused by other presubmit checks.""" |
6 | 6 |
7 import os as _os | 7 import os as _os |
8 _HERE = _os.path.dirname(_os.path.abspath(__file__)) | 8 _HERE = _os.path.dirname(_os.path.abspath(__file__)) |
9 | 9 |
10 # Justifications for each filter: | 10 # Justifications for each filter: |
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
781 description = '%s files' % len(files) | 781 description = '%s files' % len(files) |
782 | 782 |
783 return input_api.Command( | 783 return input_api.Command( |
784 name='Pylint (%s)' % description, | 784 name='Pylint (%s)' % description, |
785 cmd=[input_api.python_executable, | 785 cmd=[input_api.python_executable, |
786 input_api.os_path.join(_HERE, 'third_party', 'pylint.py'), | 786 input_api.os_path.join(_HERE, 'third_party', 'pylint.py'), |
787 '--args-on-stdin'], | 787 '--args-on-stdin'], |
788 kwargs={'env': env, 'stdin': '\n'.join(files + extra_args)}, | 788 kwargs={'env': env, 'stdin': '\n'.join(files + extra_args)}, |
789 message=error_type) | 789 message=error_type) |
790 | 790 |
791 # Always run pylint and pass it all the py files at once. | 791 # Always run pylint and pass it all the (sharded) py files at once. Passing py |
792 # Passing py files one at time is slower and can produce | 792 # files one at time is slower and can produce different results. |
793 # different results. input_api.verbose used to be used | 793 # input_api.verbose used to be used to enable this behaviour but differing |
794 # to enable this behaviour but differing behaviour in | 794 # behaviour in verbose mode is not desirable. |
795 # verbose mode is not desirable. | 795 # |
796 # Leave this unreachable code in here so users can make | 796 # We shard the pylint invocations by the number of CPUs, since they tend to |
797 # a quick local edit to diagnose pylint issues more | 797 # saturate a CPU entirely (but never more than 100%, thanks to the GIL). |
798 # easily. | |
799 if True: | 798 if True: |
800 return [GetPylintCmd(files)] | 799 # number of files to allow in one command |
800 limit = max(len(files) / input_api.cpu_count, 1) | |
801 ret = [] | |
802 while files: | |
803 ret.append(GetPylintCmd(files[:limit])) | |
804 files = files[limit:] | |
nednguyen
2015/06/12 18:06:14
If we shard the files arbitrarily, how does this a
| |
805 return ret | |
801 else: | 806 else: |
807 # Leave this unreachable code in here so users can make a quick local edit | |
808 # to diagnose pylint issues more easily. | |
802 return map(lambda x: GetPylintCmd([x]), files) | 809 return map(lambda x: GetPylintCmd([x]), files) |
803 | 810 |
804 | 811 |
805 def RunPylint(input_api, *args, **kwargs): | 812 def RunPylint(input_api, *args, **kwargs): |
806 """Legacy presubmit function. | 813 """Legacy presubmit function. |
807 | 814 |
808 For better performance, get all tests and then pass to | 815 For better performance, get all tests and then pass to |
809 input_api.RunTests. | 816 input_api.RunTests. |
810 """ | 817 """ |
811 return input_api.RunTests(GetPylint(input_api, *args, **kwargs), False) | 818 return input_api.RunTests(GetPylint(input_api, *args, **kwargs), False) |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1129 for f in affected_files: | 1136 for f in affected_files: |
1130 cmd = ['gn', 'format', '--dry-run', f.AbsoluteLocalPath()] | 1137 cmd = ['gn', 'format', '--dry-run', f.AbsoluteLocalPath()] |
1131 rc = gn.main(cmd) | 1138 rc = gn.main(cmd) |
1132 if rc == 2: | 1139 if rc == 2: |
1133 warnings.append(output_api.PresubmitPromptWarning( | 1140 warnings.append(output_api.PresubmitPromptWarning( |
1134 '%s requires formatting. Please run `gn format --in-place %s`.' % ( | 1141 '%s requires formatting. Please run `gn format --in-place %s`.' % ( |
1135 f.AbsoluteLocalPath(), f.LocalPath()))) | 1142 f.AbsoluteLocalPath(), f.LocalPath()))) |
1136 # It's just a warning, so ignore other types of failures assuming they'll be | 1143 # It's just a warning, so ignore other types of failures assuming they'll be |
1137 # caught elsewhere. | 1144 # caught elsewhere. |
1138 return warnings | 1145 return warnings |
OLD | NEW |