| OLD | NEW |
| 1 # Copyright 2012 the V8 project authors. All rights reserved. | 1 # Copyright 2012 the V8 project authors. All rights reserved. |
| 2 # Redistribution and use in source and binary forms, with or without | 2 # Redistribution and use in source and binary forms, with or without |
| 3 # modification, are permitted provided that the following conditions are | 3 # modification, are permitted provided that the following conditions are |
| 4 # met: | 4 # met: |
| 5 # | 5 # |
| 6 # * Redistributions of source code must retain the above copyright | 6 # * Redistributions of source code must retain the above copyright |
| 7 # notice, this list of conditions and the following disclaimer. | 7 # notice, this list of conditions and the following disclaimer. |
| 8 # * Redistributions in binary form must reproduce the above | 8 # * Redistributions in binary form must reproduce the above |
| 9 # copyright notice, this list of conditions and the following | 9 # copyright notice, this list of conditions and the following |
| 10 # disclaimer in the documentation and/or other materials provided | 10 # disclaimer in the documentation and/or other materials provided |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | 27 |
| 28 """Top-level presubmit script for V8. | 28 """Top-level presubmit script for V8. |
| 29 | 29 |
| 30 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts | 30 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts |
| 31 for more details about the presubmit API built into gcl. | 31 for more details about the presubmit API built into gcl. |
| 32 """ | 32 """ |
| 33 | 33 |
| 34 import sys |
| 35 |
| 36 |
| 34 def _V8PresubmitChecks(input_api, output_api): | 37 def _V8PresubmitChecks(input_api, output_api): |
| 35 """Runs the V8 presubmit checks.""" | 38 """Runs the V8 presubmit checks.""" |
| 36 import sys | 39 import sys |
| 37 sys.path.append(input_api.os_path.join( | 40 sys.path.append(input_api.os_path.join( |
| 38 input_api.PresubmitLocalPath(), 'tools')) | 41 input_api.PresubmitLocalPath(), 'tools')) |
| 39 from presubmit import CppLintProcessor | 42 from presubmit import CppLintProcessor |
| 40 from presubmit import SourceProcessor | 43 from presubmit import SourceProcessor |
| 41 | 44 |
| 42 results = [] | 45 results = [] |
| 43 if not CppLintProcessor().Run(input_api.PresubmitLocalPath()): | 46 if not CppLintProcessor().Run(input_api.PresubmitLocalPath()): |
| 44 results.append(output_api.PresubmitError("C++ lint check failed")) | 47 results.append(output_api.PresubmitError("C++ lint check failed")) |
| 45 if not SourceProcessor().Run(input_api.PresubmitLocalPath()): | 48 if not SourceProcessor().Run(input_api.PresubmitLocalPath()): |
| 46 results.append(output_api.PresubmitError( | 49 results.append(output_api.PresubmitError( |
| 47 "Copyright header, trailing whitespaces and two empty lines " \ | 50 "Copyright header, trailing whitespaces and two empty lines " \ |
| 48 "between declarations check failed")) | 51 "between declarations check failed")) |
| 49 return results | 52 return results |
| 50 | 53 |
| 51 | 54 |
| 55 def _CheckUnwantedDependencies(input_api, output_api): |
| 56 """Runs checkdeps on #include statements added in this |
| 57 change. Breaking - rules is an error, breaking ! rules is a |
| 58 warning. |
| 59 """ |
| 60 # We need to wait until we have an input_api object and use this |
| 61 # roundabout construct to import checkdeps because this file is |
| 62 # eval-ed and thus doesn't have __file__. |
| 63 original_sys_path = sys.path |
| 64 try: |
| 65 sys.path = sys.path + [input_api.os_path.join( |
| 66 input_api.PresubmitLocalPath(), 'buildtools', 'checkdeps')] |
| 67 import checkdeps |
| 68 from cpp_checker import CppChecker |
| 69 from rules import Rule |
| 70 finally: |
| 71 # Restore sys.path to what it was before. |
| 72 sys.path = original_sys_path |
| 73 |
| 74 added_includes = [] |
| 75 for f in input_api.AffectedFiles(): |
| 76 if not CppChecker.IsCppFile(f.LocalPath()): |
| 77 continue |
| 78 |
| 79 changed_lines = [line for line_num, line in f.ChangedContents()] |
| 80 added_includes.append([f.LocalPath(), changed_lines]) |
| 81 |
| 82 deps_checker = checkdeps.DepsChecker(input_api.PresubmitLocalPath()) |
| 83 |
| 84 error_descriptions = [] |
| 85 warning_descriptions = [] |
| 86 for path, rule_type, rule_description in deps_checker.CheckAddedCppIncludes( |
| 87 added_includes): |
| 88 description_with_path = '%s\n %s' % (path, rule_description) |
| 89 if rule_type == Rule.DISALLOW: |
| 90 error_descriptions.append(description_with_path) |
| 91 else: |
| 92 warning_descriptions.append(description_with_path) |
| 93 |
| 94 results = [] |
| 95 if error_descriptions: |
| 96 results.append(output_api.PresubmitError( |
| 97 'You added one or more #includes that violate checkdeps rules.', |
| 98 error_descriptions)) |
| 99 if warning_descriptions: |
| 100 results.append(output_api.PresubmitPromptOrNotify( |
| 101 'You added one or more #includes of files that are temporarily\n' |
| 102 'allowed but being removed. Can you avoid introducing the\n' |
| 103 '#include? See relevant DEPS file(s) for details and contacts.', |
| 104 warning_descriptions)) |
| 105 return results |
| 106 |
| 107 |
| 52 def _CommonChecks(input_api, output_api): | 108 def _CommonChecks(input_api, output_api): |
| 53 """Checks common to both upload and commit.""" | 109 """Checks common to both upload and commit.""" |
| 54 results = [] | 110 results = [] |
| 55 results.extend(input_api.canned_checks.CheckOwners( | 111 results.extend(input_api.canned_checks.CheckOwners( |
| 56 input_api, output_api, source_file_filter=None)) | 112 input_api, output_api, source_file_filter=None)) |
| 57 results.extend(_V8PresubmitChecks(input_api, output_api)) | 113 results.extend(_V8PresubmitChecks(input_api, output_api)) |
| 114 results.extend(_CheckUnwantedDependencies(input_api, output_api)) |
| 58 return results | 115 return results |
| 59 | 116 |
| 60 | 117 |
| 61 def _SkipTreeCheck(input_api, output_api): | 118 def _SkipTreeCheck(input_api, output_api): |
| 62 """Check the env var whether we want to skip tree check. | 119 """Check the env var whether we want to skip tree check. |
| 63 Only skip if src/version.cc has been updated.""" | 120 Only skip if src/version.cc has been updated.""" |
| 64 src_version = 'src/version.cc' | 121 src_version = 'src/version.cc' |
| 65 FilterFile = lambda file: file.LocalPath() == src_version | 122 FilterFile = lambda file: file.LocalPath() == src_version |
| 66 if not input_api.AffectedSourceFiles( | 123 if not input_api.AffectedSourceFiles( |
| 67 lambda file: file.LocalPath() == src_version): | 124 lambda file: file.LocalPath() == src_version): |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 'v8_linux_nosnap_rel': set(['defaulttests']), | 165 'v8_linux_nosnap_rel': set(['defaulttests']), |
| 109 'v8_linux_nosnap_dbg': set(['defaulttests']), | 166 'v8_linux_nosnap_dbg': set(['defaulttests']), |
| 110 'v8_linux64_rel': set(['defaulttests']), | 167 'v8_linux64_rel': set(['defaulttests']), |
| 111 'v8_linux_arm_dbg': set(['defaulttests']), | 168 'v8_linux_arm_dbg': set(['defaulttests']), |
| 112 'v8_linux_arm64_rel': set(['defaulttests']), | 169 'v8_linux_arm64_rel': set(['defaulttests']), |
| 113 'v8_linux_layout_dbg': set(['defaulttests']), | 170 'v8_linux_layout_dbg': set(['defaulttests']), |
| 114 'v8_mac_rel': set(['defaulttests']), | 171 'v8_mac_rel': set(['defaulttests']), |
| 115 'v8_win_rel': set(['defaulttests']), | 172 'v8_win_rel': set(['defaulttests']), |
| 116 }, | 173 }, |
| 117 } | 174 } |
| OLD | NEW |