123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- '''
- Copyright 2011 Google Inc.
- Use of this source code is governed by a BSD-style license that can be
- found in the LICENSE file.
- '''
- '''
- Updates all copyright headers within our code:
- - For files that already have a copyright header, the header is modified
- while keeping the year and holder intact.
- - For files that don't have a copyright header, we add one with the current
- year and default holder.
- @author: epoger@google.com
- '''
- import os
- import sys
- import fileparser
- # Only modify copyright stanzas if the copyright holder is one of these.
- ALLOWED_COPYRIGHT_HOLDERS = [
- 'Google Inc.',
- 'Skia',
- 'The Android Open Source Project',
- ]
- def Main(root_directory):
- """Run everything.
- @param root_directory root directory within which to modify all files
- """
- filepaths = GetAllFilepaths(root_directory)
- for filepath in filepaths:
- parser = fileparser.CreateParser(filepath)
- if not parser:
- ReportWarning('cannot find a parser for file %s, skipping...' %
- filepath)
- continue
- old_file_contents = ReadFileIntoString(filepath)
- comment_blocks = parser.FindAllCommentBlocks(old_file_contents)
- if not comment_blocks:
- ReportWarning('cannot find any comment blocks in file %s' %
- filepath)
- old_copyright_block = parser.FindCopyrightBlock(comment_blocks)
- if not old_copyright_block:
- ReportWarning('cannot find copyright block in file %s' % filepath)
- (year, holder) = parser.GetCopyrightBlockAttributes(old_copyright_block)
- if holder and not ConfirmAllowedCopyrightHolder(holder):
- ReportWarning(
- 'unrecognized copyright holder "%s" in file %s, skipping...' % (
- holder, filepath))
- continue
- new_copyright_block = parser.CreateCopyrightBlock(year, holder)
- if old_copyright_block:
- new_file_contents = old_file_contents.replace(
- old_copyright_block, new_copyright_block, 1)
- else:
- new_file_contents = new_copyright_block + old_file_contents
- WriteStringToFile(new_file_contents, filepath)
- def GetAllFilepaths(root_directory):
- """Return a list of all files (absolute path for each one) within a tree.
- @param root_directory root directory within which to find all files
- """
- path_list = []
- for dirpath, _, filenames in os.walk(root_directory):
- for filename in filenames:
- path_list.append(os.path.abspath(os.path.join(dirpath, filename)))
- return path_list
- def ReportWarning(text):
- """Report a warning, but continue.
- """
- print 'warning: %s' % text
- def ReportError(text):
- """Report an error and raise an exception.
- """
- raise IOError(text)
- def ReadFileIntoString(filepath):
- """Returns the full contents of this file as a string.
- """
- with open(filepath, 'r') as file_handle:
- contents = file_handle.read()
- return contents
- def WriteStringToFile(string, filepath):
- """Writes this string out to filepath, replacing the file if it already
- exists.
- """
- with open(filepath, 'w') as file_handle:
- file_handle.write(string)
- def ConfirmAllowedCopyrightHolder(holder):
- """Returns True if this is one of our allowed copyright holders.
- @param holder copyright holder as a string
- """
- return holder in ALLOWED_COPYRIGHT_HOLDERS
- Main(sys.argv[1])
|