Index: PRESUBMIT.py |
diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
index 694624e56d042ac395a122aec8ad67deb1edca44..e13c9a05a4611940ff7f0a9578fe128847bd8a24 100755 |
--- a/PRESUBMIT.py |
+++ b/PRESUBMIT.py |
@@ -575,6 +575,7 @@ def _CommonChecks(input_api, output_api): |
results.extend(_CheckJSONParseErrors(input_api, output_api)) |
results.extend(_RunPythonTests(input_api, output_api)) |
results.extend(_CheckUsageOfGoogleProtobufNamespace(input_api, output_api)) |
+ results.extend(_CheckOrphanHeaders(input_api, output_api)) |
return results |
@@ -602,3 +603,33 @@ def CheckChangeOnCommit(input_api, output_api): |
input_api, output_api, |
json_url='http://webrtc-status.appspot.com/current?format=json')) |
return results |
+ |
+ |
+def _CheckOrphanHeaders(input_api, output_api): |
+ # We need to wait until we have an input_api object and use this |
+ # roundabout construct to import prebubmit_checks_lib because this file is |
+ # eval-ed and thus doesn't have __file__. |
+ error_msg = """Header file {} is not listed in any GN target. |
+ Please create a target or add it to an existing one in {}""" |
+ results = [] |
+ original_sys_path = sys.path |
+ try: |
+ sys.path = sys.path + [input_api.os_path.join( |
+ input_api.PresubmitLocalPath(), 'tools_webrtc', 'presubmit_checks_lib')] |
+ from check_orphan_headers import GetBuildGnPathFromFilePath |
+ from check_orphan_headers import IsHeaderInBuildGn |
+ finally: |
+ # Restore sys.path to what it was before. |
+ sys.path = original_sys_path |
+ |
+ for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): |
+ if f.LocalPath().endswith('.h'): |
+ file_path = os.path.abspath(f.LocalPath()) |
+ root_dir = os.getcwd() |
+ gn_file_path = GetBuildGnPathFromFilePath(file_path, os.path.exists, |
+ root_dir) |
+ in_build_gn = IsHeaderInBuildGn(file_path, gn_file_path) |
+ if not in_build_gn: |
+ results.append(output_api.PresubmitError(error_msg.format( |
+ file_path, gn_file_path))) |
+ return results |