Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: tools/licenses.py

Issue 10816041: Add a tool to check license compatibility with Android (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Avoid list of third-party directories Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Utility for checking and processing licensing information in third_party 6 """Utility for checking and processing licensing information in third_party
7 directories. 7 directories.
8 8
9 Usage: licenses.py <command> 9 Usage: licenses.py <command>
10 10
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 260
261 def ContainsFiles(path): 261 def ContainsFiles(path):
262 """Determines whether any files exist in a directory or in any of its 262 """Determines whether any files exist in a directory or in any of its
263 subdirectories.""" 263 subdirectories."""
264 for _, _, files in os.walk(path): 264 for _, _, files in os.walk(path):
265 if files: 265 if files:
266 return True 266 return True
267 return False 267 return False
268 268
269 269
270 def FindThirdPartyDirs(): 270 def FindThirdPartyDirs(prune_paths):
271 """Find all third_party directories underneath the current directory.""" 271 """Find all third_party directories underneath the current directory."""
272 third_party_dirs = [] 272 third_party_dirs = []
273 for path, dirs, files in os.walk('.'): 273 for path, dirs, files in os.walk('.'):
274 path = path[len('./'):] # Pretty up the path. 274 path = path[len('./'):] # Pretty up the path.
275 275
276 if path in PRUNE_PATHS: 276 if path in prune_paths:
277 dirs[:] = [] 277 dirs[:] = []
278 continue 278 continue
279 279
280 # Prune out directories we want to skip. 280 # Prune out directories we want to skip.
281 # (Note that we loop over PRUNE_DIRS so we're not iterating over a 281 # (Note that we loop over PRUNE_DIRS so we're not iterating over a
282 # list that we're simultaneously mutating.) 282 # list that we're simultaneously mutating.)
283 for skip in PRUNE_DIRS: 283 for skip in PRUNE_DIRS:
284 if skip in dirs: 284 if skip in dirs:
285 dirs.remove(skip) 285 dirs.remove(skip)
286 286
287 if os.path.basename(path) == 'third_party': 287 if os.path.basename(path) == 'third_party':
288 # Add all subdirectories that are not marked for skipping. 288 # Add all subdirectories that are not marked for skipping.
289 for dir in dirs: 289 for dir in dirs:
290 dirpath = os.path.join(path, dir) 290 dirpath = os.path.join(path, dir)
291 if dirpath not in PRUNE_PATHS: 291 if dirpath not in prune_paths:
292 third_party_dirs.append(dirpath) 292 third_party_dirs.append(dirpath)
293 293
294 # Don't recurse into any subdirs from here. 294 # Don't recurse into any subdirs from here.
295 dirs[:] = [] 295 dirs[:] = []
296 continue 296 continue
297 297
298 # Don't recurse into paths in ADDITIONAL_PATHS, like we do with regular 298 # Don't recurse into paths in ADDITIONAL_PATHS, like we do with regular
299 # third_party/foo paths. 299 # third_party/foo paths.
300 if path in ADDITIONAL_PATHS: 300 if path in ADDITIONAL_PATHS:
301 dirs[:] = [] 301 dirs[:] = []
302 302
303 for dir in ADDITIONAL_PATHS: 303 for dir in ADDITIONAL_PATHS:
304 third_party_dirs.append(dir) 304 third_party_dirs.append(dir)
305 305
306 # If a directory contains no files, assume it's a DEPS directory for a 306 # If a directory contains no files, assume it's a DEPS directory for a
307 # project not used by our current configuration and skip it. 307 # project not used by our current configuration and skip it.
308 return [x for x in third_party_dirs if ContainsFiles(x)] 308 return [x for x in third_party_dirs if ContainsFiles(x)]
309 309
310 310
311 def ScanThirdPartyDirs(): 311 def ScanThirdPartyDirs():
312 """Scan a list of directories and report on any problems we find.""" 312 """Scan a list of directories and report on any problems we find."""
313 third_party_dirs = FindThirdPartyDirs() 313 third_party_dirs = FindThirdPartyDirs(PRUNE_PATHS)
314 314
315 errors = [] 315 errors = []
316 for path in sorted(third_party_dirs): 316 for path in sorted(third_party_dirs):
317 try: 317 try:
318 metadata = ParseDir(path) 318 metadata = ParseDir(path)
319 except LicenseError, e: 319 except LicenseError, e:
320 errors.append((path, e.args[0])) 320 errors.append((path, e.args[0]))
321 continue 321 continue
322 322
323 for path, error in sorted(errors): 323 for path, error in sorted(errors):
324 print path + ": " + error 324 print path + ": " + error
325 325
326 return len(errors) == 0 326 return len(errors) == 0
327 327
328 328
329 def GenerateCredits(): 329 def GenerateCredits():
330 """Generate about:credits, dumping the result to stdout.""" 330 """Generate about:credits, dumping the result to stdout."""
331 331
332 def EvaluateTemplate(template, env, escape=True): 332 def EvaluateTemplate(template, env, escape=True):
333 """Expand a template with variables like {{foo}} using a 333 """Expand a template with variables like {{foo}} using a
334 dictionary of expansions.""" 334 dictionary of expansions."""
335 for key, val in env.items(): 335 for key, val in env.items():
336 if escape and not key.endswith("_unescaped"): 336 if escape and not key.endswith("_unescaped"):
337 val = cgi.escape(val) 337 val = cgi.escape(val)
338 template = template.replace('{{%s}}' % key, val) 338 template = template.replace('{{%s}}' % key, val)
339 return template 339 return template
340 340
341 third_party_dirs = FindThirdPartyDirs() 341 third_party_dirs = FindThirdPartyDirs(PRUNE_PATHS)
342 342
343 entry_template = open('chrome/browser/resources/about_credits_entry.tmpl', 343 entry_template = open('chrome/browser/resources/about_credits_entry.tmpl',
344 'rb').read() 344 'rb').read()
345 entries = [] 345 entries = []
346 for path in sorted(third_party_dirs): 346 for path in sorted(third_party_dirs):
347 try: 347 try:
348 metadata = ParseDir(path) 348 metadata = ParseDir(path)
349 except LicenseError: 349 except LicenseError:
350 print >>sys.stderr, ("WARNING: licensing info for " + path + 350 print >>sys.stderr, ("WARNING: licensing info for " + path +
351 " is incomplete, skipping.") 351 " is incomplete, skipping.")
(...skipping 27 matching lines...) Expand all
379 elif command == 'credits': 379 elif command == 'credits':
380 if not GenerateCredits(): 380 if not GenerateCredits():
381 return 1 381 return 1
382 else: 382 else:
383 print __doc__ 383 print __doc__
384 return 1 384 return 1
385 385
386 386
387 if __name__ == '__main__': 387 if __name__ == '__main__':
388 sys.exit(main()) 388 sys.exit(main())
OLDNEW
« android_webview/tools/third_party_files_whitelist.txt ('K') | « chrome/version.h.in ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698