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

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: Fixed nit 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
« no previous file with comments | « chrome/version.h.in ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 303
304 def ContainsFiles(path): 304 def ContainsFiles(path):
305 """Determines whether any files exist in a directory or in any of its 305 """Determines whether any files exist in a directory or in any of its
306 subdirectories.""" 306 subdirectories."""
307 for _, _, files in os.walk(path): 307 for _, _, files in os.walk(path):
308 if files: 308 if files:
309 return True 309 return True
310 return False 310 return False
311 311
312 312
313 def FindThirdPartyDirs(): 313 def FindThirdPartyDirs(prune_paths):
314 """Find all third_party directories underneath the current directory.""" 314 """Find all third_party directories underneath the current directory."""
315 third_party_dirs = [] 315 third_party_dirs = []
316 for path, dirs, files in os.walk('.'): 316 for path, dirs, files in os.walk('.'):
317 path = path[len('./'):] # Pretty up the path. 317 path = path[len('./'):] # Pretty up the path.
318 318
319 if path in PRUNE_PATHS: 319 if path in prune_paths:
320 dirs[:] = [] 320 dirs[:] = []
321 continue 321 continue
322 322
323 # Prune out directories we want to skip. 323 # Prune out directories we want to skip.
324 # (Note that we loop over PRUNE_DIRS so we're not iterating over a 324 # (Note that we loop over PRUNE_DIRS so we're not iterating over a
325 # list that we're simultaneously mutating.) 325 # list that we're simultaneously mutating.)
326 for skip in PRUNE_DIRS: 326 for skip in PRUNE_DIRS:
327 if skip in dirs: 327 if skip in dirs:
328 dirs.remove(skip) 328 dirs.remove(skip)
329 329
330 if os.path.basename(path) == 'third_party': 330 if os.path.basename(path) == 'third_party':
331 # Add all subdirectories that are not marked for skipping. 331 # Add all subdirectories that are not marked for skipping.
332 for dir in dirs: 332 for dir in dirs:
333 dirpath = os.path.join(path, dir) 333 dirpath = os.path.join(path, dir)
334 if dirpath not in PRUNE_PATHS: 334 if dirpath not in prune_paths:
335 third_party_dirs.append(dirpath) 335 third_party_dirs.append(dirpath)
336 336
337 # Don't recurse into any subdirs from here. 337 # Don't recurse into any subdirs from here.
338 dirs[:] = [] 338 dirs[:] = []
339 continue 339 continue
340 340
341 # Don't recurse into paths in ADDITIONAL_PATHS, like we do with regular 341 # Don't recurse into paths in ADDITIONAL_PATHS, like we do with regular
342 # third_party/foo paths. 342 # third_party/foo paths.
343 if path in ADDITIONAL_PATHS: 343 if path in ADDITIONAL_PATHS:
344 dirs[:] = [] 344 dirs[:] = []
345 345
346 for dir in ADDITIONAL_PATHS: 346 for dir in ADDITIONAL_PATHS:
347 third_party_dirs.append(dir) 347 third_party_dirs.append(dir)
348 348
349 # If a directory contains no files, assume it's a DEPS directory for a 349 # If a directory contains no files, assume it's a DEPS directory for a
350 # project not used by our current configuration and skip it. 350 # project not used by our current configuration and skip it.
351 return [x for x in third_party_dirs if ContainsFiles(x)] 351 return [x for x in third_party_dirs if ContainsFiles(x)]
352 352
353 353
354 def ScanThirdPartyDirs(): 354 def ScanThirdPartyDirs():
355 """Scan a list of directories and report on any problems we find.""" 355 """Scan a list of directories and report on any problems we find."""
356 third_party_dirs = FindThirdPartyDirs() 356 third_party_dirs = FindThirdPartyDirs(PRUNE_PATHS)
357 357
358 errors = [] 358 errors = []
359 for path in sorted(third_party_dirs): 359 for path in sorted(third_party_dirs):
360 try: 360 try:
361 metadata = ParseDir(path) 361 metadata = ParseDir(path)
362 except LicenseError, e: 362 except LicenseError, e:
363 errors.append((path, e.args[0])) 363 errors.append((path, e.args[0]))
364 continue 364 continue
365 365
366 for path, error in sorted(errors): 366 for path, error in sorted(errors):
367 print path + ": " + error 367 print path + ": " + error
368 368
369 return len(errors) == 0 369 return len(errors) == 0
370 370
371 371
372 def GenerateCredits(): 372 def GenerateCredits():
373 """Generate about:credits, dumping the result to stdout.""" 373 """Generate about:credits, dumping the result to stdout."""
374 374
375 def EvaluateTemplate(template, env, escape=True): 375 def EvaluateTemplate(template, env, escape=True):
376 """Expand a template with variables like {{foo}} using a 376 """Expand a template with variables like {{foo}} using a
377 dictionary of expansions.""" 377 dictionary of expansions."""
378 for key, val in env.items(): 378 for key, val in env.items():
379 if escape and not key.endswith("_unescaped"): 379 if escape and not key.endswith("_unescaped"):
380 val = cgi.escape(val) 380 val = cgi.escape(val)
381 template = template.replace('{{%s}}' % key, val) 381 template = template.replace('{{%s}}' % key, val)
382 return template 382 return template
383 383
384 third_party_dirs = FindThirdPartyDirs() 384 third_party_dirs = FindThirdPartyDirs(PRUNE_PATHS)
385 385
386 entry_template = open('chrome/browser/resources/about_credits_entry.tmpl', 386 entry_template = open('chrome/browser/resources/about_credits_entry.tmpl',
387 'rb').read() 387 'rb').read()
388 entries = [] 388 entries = []
389 for path in sorted(third_party_dirs): 389 for path in sorted(third_party_dirs):
390 try: 390 try:
391 metadata = ParseDir(path) 391 metadata = ParseDir(path)
392 except LicenseError: 392 except LicenseError:
393 print >>sys.stderr, ("WARNING: licensing info for " + path + 393 print >>sys.stderr, ("WARNING: licensing info for " + path +
394 " is incomplete, skipping.") 394 " is incomplete, skipping.")
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 elif command == 'credits': 426 elif command == 'credits':
427 if not GenerateCredits(): 427 if not GenerateCredits():
428 return 1 428 return 1
429 else: 429 else:
430 print __doc__ 430 print __doc__
431 return 1 431 return 1
432 432
433 433
434 if __name__ == '__main__': 434 if __name__ == '__main__':
435 sys.exit(main()) 435 sys.exit(main())
OLDNEW
« no previous file with comments | « chrome/version.h.in ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698