diff options
author | noelallen@chromium.org <noelallen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-14 06:58:14 +0000 |
---|---|---|
committer | noelallen@chromium.org <noelallen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-14 06:58:14 +0000 |
commit | c7db6e93a71e9c0a1571605c6aed34cb7dc7d2b1 (patch) | |
tree | 1cc3e4ad64a6d71e9a272d61245c06ff429a3857 /ppapi/PRESUBMIT.py | |
parent | b784314e190cd396665f7f7a95d51bc724466653 (diff) | |
download | chromium_src-c7db6e93a71e9c0a1571605c6aed34cb7dc7d2b1.zip chromium_src-c7db6e93a71e9c0a1571605c6aed34cb7dc7d2b1.tar.gz chromium_src-c7db6e93a71e9c0a1571605c6aed34cb7dc7d2b1.tar.bz2 |
Make PPAPI presubmit more stringent
The PPAPI docs team is having issues with missing documentation, this
CL makes the PRESUBMIT more stringent, forcing errors when a stable
interfaces contains a TODO, or is missing an IDL implementation.
Additional cleanup:
Added missing LF between global function definitions
Removed extra space in list
Added comments
Converted all errors and warnings to point to the file where the
error was found.
Review URL: http://codereview.chromium.org/9691019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126601 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/PRESUBMIT.py')
-rw-r--r-- | ppapi/PRESUBMIT.py | 108 |
1 files changed, 95 insertions, 13 deletions
diff --git a/ppapi/PRESUBMIT.py b/ppapi/PRESUBMIT.py index 3e0f963..20d9e6c 100644 --- a/ppapi/PRESUBMIT.py +++ b/ppapi/PRESUBMIT.py @@ -3,9 +3,11 @@ # found in the LICENSE file. import os +import re import sys import subprocess + def RunCmdAndCheck(cmd, err_string, output_api, cwd=None): results = [] p = subprocess.Popen(cmd, cwd=cwd, @@ -52,6 +54,44 @@ def CheckSrpcChange(input_api, output_api): output_api) return [] + +# Verify that the files do not contain a 'TODO' in them. +RE_TODO = re.compile(r'\WTODO\W', flags=re.I) +def CheckTODO(input_api, output_api): + files = input_api.LocalPaths() + todo = [] + + for filename in files: + name, ext = os.path.splitext(filename) + name_parts = name.split(os.sep) + + # Only check normal build sources. + if ext not in ['.h', '.cc', '.idl']: + continue + + # Only examine the ppapi directory. + if name_parts[0] != 'ppapi': + continue + + # Only examine public plugin facing directories. + if name_parts[1] not in ['api', 'c', 'cpp', 'utility']: + continue + + # Only examine public stable interfaces. + if name_parts[2] in ['dev', 'private', 'trusted']: + continue + + filepath = os.path.join('..', filename) + if RE_TODO.search(open(filepath, 'rb').read()): + todo.append(filename) + + if todo: + return [output_api.PresubmitError( + 'TODOs found in stable public PPAPI files:', + long_text='\n'.join(todo))] + return [] + + def CheckChange(input_api, output_api): results = [] @@ -59,11 +99,13 @@ def CheckChange(input_api, output_api): results.extend(RunUnittests(input_api, output_api)) + results.extend(CheckTODO(input_api, output_api)) # Verify all modified *.idl have a matching *.h files = input_api.LocalPaths() h_files = [] idl_files = [] + # Find all relevant .h and .idl files. for filename in files: name, ext = os.path.splitext(filename) name_parts = name.split(os.sep) @@ -81,36 +123,76 @@ def CheckChange(input_api, output_api): missing = [] for filename in idl_files: if filename not in set(h_files): - missing.append(' ppapi/c/%s.h' % filename) + missing.append(' ppapi/c/%s.idl' % filename) + + if missing: + results.append( + output_api.PresubmitPromptWarning( + 'Missing PPAPI header, no change or skipped generation?', + long_text='\n'.join(missing))) + + missing_dev = [] + missing_stable = [] + missing_priv = [] for filename in h_files: if filename not in set(idl_files): - missing.append(' ppapi/api/%s.idl' % filename) + name_parts = filename.split(os.sep) - if missing: + if 'trusted' in name_parts: + missing_priv.append(' ppapi/c/%s.h' % filename) + continue + + if 'private' in name_parts: + missing_priv.append(' ppapi/c/%s.h' % filename) + continue + + if 'dev' in name_parts: + missing_dev.append(' ppapi/c/%s.h' % filename) + continue + + missing_stable.append(' ppapi/c/%s.h' % filename) + + if missing_priv: + results.append( + output_api.PresubmitPromptWarning( + 'Missing PPAPI IDL for private interface, please generate IDL:', + long_text='\n'.join(missing_priv))) + + if missing_dev: + results.append( + output_api.PresubmitPromptWarning( + 'Missing PPAPI IDL for DEV, required before moving to stable:', + long_text='\n'.join(missing_dev))) + + if missing_stable: results.append( - output_api.PresubmitPromptWarning('Missing matching PPAPI definition:', - long_text='\n'.join(missing))) + output_api.PresubmitError( + 'Missing PPAPI IDL for stable interface:', + long_text='\n'.join(missing_stable))) # Verify all *.h files match *.idl definitions, use: # --test to prevent output to disk # --diff to generate a unified diff # --out to pick which files to examine (only the ones in the CL) ppapi_dir = input_api.PresubmitLocalPath() - cmd = [ sys.executable, 'generator.py', - '--wnone', '--diff', '--test','--cgen', '--range=start,end'] + cmd = [sys.executable, 'generator.py', + '--wnone', '--diff', '--test','--cgen', '--range=start,end'] # Only generate output for IDL files references (as *.h or *.idl) in this CL cmd.append('--out=' + ','.join([name + '.idl' for name in both])) - results.extend(RunCmdAndCheck(cmd, - 'PPAPI IDL Diff detected: Run the generator.', - output_api, - os.path.join(ppapi_dir, 'generators'))) + cmd_results = RunCmdAndCheck(cmd, + 'PPAPI IDL Diff detected: Run the generator.', + output_api, + os.path.join(ppapi_dir, 'generators')) + if cmd_results: + results.extend(cmd_results) + return results + def CheckChangeOnUpload(input_api, output_api): -# return [] return CheckChange(input_api, output_api) + def CheckChangeOnCommit(input_api, output_api): -# return [] return CheckChange(input_api, output_api) |