Skip to content

Commit

Permalink
Add presubmit check to verify PPAPI C headers match IDL files.
Browse files Browse the repository at this point in the history
Update outfile to print a better filename on diff.
Update fix missing 'name' in idl_generator.py

BUG= http://code.google.com/p/chromium/issues/detail?id=93534
TEST= gcl upload | presubmit (after modifying a .h or .idl file)
R= brettw@chromium.org
Review URL: http://codereview.chromium.org/7700001

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101092 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
noelallen@google.com committed Sep 14, 2011
1 parent e66b721 commit 3937578
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 2 deletions.
72 changes: 72 additions & 0 deletions ppapi/PRESUBMIT.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os
import sys
import subprocess

def CheckChange(input_api, output_api):
results = []

# Verify all modified *.idl have a matching *.h
files = input_api.LocalPaths()
h_files = []
idl_files = []

for filename in files:
name, ext = os.path.splitext(filename)
name_parts = name.split(os.sep)
if name_parts[0:2] == ['ppapi', 'c'] and ext == '.h':
h_files.append('/'.join(name_parts[2:]))
if name_parts[0:2] == ['ppapi', 'api'] and ext == '.idl':
idl_files.append('/'.join(name_parts[2:]))

# Generate a list of all appropriate *.h and *.idl changes in this CL.
both = h_files + idl_files

# If there aren't any, we are done checking.
if not both: return results

missing = []
for filename in idl_files:
if filename not in set(h_files):
missing.append(' ppapi/c/%s.h' % filename)
for filename in h_files:
if filename not in set(idl_files):
missing.append(' ppapi/api/%s.idl' % filename)

if missing:
results.append(
output_api.PresubmitPromptWarning('Missing matching PPAPI definition:',
long_text='\n'.join(missing)))

# 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=M13,M14']

# Only generate output for IDL files references (as *.h or *.idl) in this CL
cmd.append('--out=' + ','.join([name + '.idl' for name in both]))

p = subprocess.Popen(cmd, cwd=os.path.join(ppapi_dir, 'generators'),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
(p_stdout, p_stderr) = p.communicate()
if p.returncode:
results.append(
output_api.PresubmitError('PPAPI IDL Diff detected: Run the generator.',
long_text=p_stderr))
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)

2 changes: 1 addition & 1 deletion ppapi/generators/idl_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def GenerateRange(self, ast, releases, options):
cnt = 0
for filenode in ast.GetListOf('File'):
# Skip this file if not required
if outlist and name not in outlist:
if outlist and filenode.GetName() not in outlist:
continue

# If this file has errors, skip it
Expand Down
4 changes: 3 additions & 1 deletion ppapi/generators/idl_outfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,9 @@ def Close(self):

if GetOption('diff'):
for line in difflib.unified_diff(intext.split('\n'), outtext.split('\n'),
self.filename, 'NEW', n=1, lineterm=''):
'OLD ' + self.filename,
'NEW ' + self.filename,
n=1, lineterm=''):
ErrOut.Log(line)

try:
Expand Down

0 comments on commit 3937578

Please sign in to comment.