diff options
Diffstat (limited to 'BuildTools/Copyrighter.py')
-rwxr-xr-x | BuildTools/Copyrighter.py | 276 |
1 files changed, 138 insertions, 138 deletions
diff --git a/BuildTools/Copyrighter.py b/BuildTools/Copyrighter.py index a3b6379..a16050c 100755 --- a/BuildTools/Copyrighter.py +++ b/BuildTools/Copyrighter.py @@ -11,32 +11,32 @@ LICENSE_DIR = "Documentation/Licenses" reParseLicenseCommentBlocks = re.compile(ur'(\/\*\n\s\*\sCopyright \(c\) (?P<startYear>\d\d\d\d)(-(?P<endYear>\d\d\d\d))? (?P<author>[^\n\.]*)\.?\n.\* (?P<license>[^\n]*)\n \* (?P<seeMore>[^\n]+)\n *\*\/)') class License : - def __init__(self, name, file) : - self.name = name - self.file = file + def __init__(self, name, file) : + self.name = name + self.file = file licenses = { - "default": License("All rights reserved.", "See the COPYING file for more information."), - "gpl3" : License("Licensed under the GNU General Public License v3.", "See " + LICENSE_DIR + "/" + "GPLv3.txt" + " for more information."), - "mit" : License("Licensed under the MIT License.", "See " + LICENSE_DIR + "/" + "MIT.txt" + " for more information."), - } + "default": License("All rights reserved.", "See the COPYING file for more information."), + "gpl3" : License("Licensed under the GNU General Public License v3.", "See " + LICENSE_DIR + "/" + "GPLv3.txt" + " for more information."), + "mit" : License("Licensed under the MIT License.", "See " + LICENSE_DIR + "/" + "MIT.txt" + " for more information."), + } class Copyright : - def __init__(self, author, year, license) : - self.author = author - self.year = year - self.license = license - - def to_string(self, comment_chars) : - return "\n".join([ - comment_chars[0], - comment_chars[1] + " Copyright (c) %(year)s %(name)s" % {"year" : self.year, "name" : self.author }, - comment_chars[1] + licenses[self.license].name, - comment_chars[1] + licenses[self.license].file, - comment_chars[2], - "\n"]) - def __str__(self): - return """/* + def __init__(self, author, year, license) : + self.author = author + self.year = year + self.license = license + + def to_string(self, comment_chars) : + return "\n".join([ + comment_chars[0], + comment_chars[1] + " Copyright (c) %(year)s %(name)s" % {"year" : self.year, "name" : self.author }, + comment_chars[1] + licenses[self.license].name, + comment_chars[1] + licenses[self.license].file, + comment_chars[2], + "\n"]) + def __str__(self): + return """/* * Copyright (c) %s %s. * %s * %s @@ -44,145 +44,145 @@ class Copyright : """ % (self.year, self.author, licenses[self.license].name, licenses[self.license].file) class ContentRef : - def __init__(self, begin, end, content): - self.begin = begin - self.end = end - self.content = content + def __init__(self, begin, end, content): + self.begin = begin + self.end = end + self.content = content class CopyrightBlock : - def __init__(self, yearBegin, yearEnd, author, license, seeMore, total): - self.yearBegin = yearBegin - self.yearEnd = yearEnd - self.author = author - self.license = license - self.seeMore = seeMore - self.total = total + def __init__(self, yearBegin, yearEnd, author, license, seeMore, total): + self.yearBegin = yearBegin + self.yearEnd = yearEnd + self.author = author + self.license = license + self.seeMore = seeMore + self.total = total def cref_from_group(match, group): - if match.group(group): - return ContentRef(match.start(group), match.end(group), match.group(group)) - else : - return None + if match.group(group): + return ContentRef(match.start(group), match.end(group), match.group(group)) + else : + return None def parse_file_new(filename): - copyrightBlocks = [] - with open(filename, 'r') as file: - content = file.read() - for match in re.finditer(reParseLicenseCommentBlocks, content): - copyrightBlocks.append(CopyrightBlock( - cref_from_group(match, "startYear"), - cref_from_group(match, "endYear"), - cref_from_group(match, "author"), - cref_from_group(match, "license"), - cref_from_group(match, "seeMore"), - cref_from_group(match, 0))) - return copyrightBlocks + copyrightBlocks = [] + with open(filename, 'r') as file: + content = file.read() + for match in re.finditer(reParseLicenseCommentBlocks, content): + copyrightBlocks.append(CopyrightBlock( + cref_from_group(match, "startYear"), + cref_from_group(match, "endYear"), + cref_from_group(match, "author"), + cref_from_group(match, "license"), + cref_from_group(match, "seeMore"), + cref_from_group(match, 0))) + return copyrightBlocks def get_userinfo() : - p = subprocess.Popen("git config user.name", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=(os.name != "nt")) - username = p.stdout.read().rstrip() - p.stdin.close() - if p.wait() != 0 : - return None - p = subprocess.Popen("git config user.email", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=(os.name != "nt")) - email = p.stdout.read().rstrip() - p.stdin.close() - if p.wait() != 0 : - return None - return (username, email) + p = subprocess.Popen("git config user.name", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=(os.name != "nt")) + username = p.stdout.read().rstrip() + p.stdin.close() + if p.wait() != 0 : + return None + p = subprocess.Popen("git config user.email", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=(os.name != "nt")) + email = p.stdout.read().rstrip() + p.stdin.close() + if p.wait() != 0 : + return None + return (username, email) def get_copyright(username, email) : - if email in ["git@el-tramo.be", "git@kismith.co.uk"] : - license = DEFAULT_LICENSE - else : - license = CONTRIBUTOR_LICENSE - return Copyright(username, datetime.date.today().strftime("%Y"), license) + if email in ["git@el-tramo.be", "git@kismith.co.uk"] : + license = DEFAULT_LICENSE + else : + license = CONTRIBUTOR_LICENSE + return Copyright(username, datetime.date.today().strftime("%Y"), license) def get_copyright_setting(username, email) : - config = os.getenv("SWIFT_LICENSE_CONFIG") - if config : - copyrightHolder, license = config.split("|") - else : - if email.endswith("isode.com") or email in ["git@el-tramo.be", "git@kismith.co.uk", "tm@ayena.de"] : - copyrightHolder, license = "Isode Limited", "default" - else : - copyrightHolder, license = username, "mit" - return Copyright(copyrightHolder, datetime.date.today().year, license) + config = os.getenv("SWIFT_LICENSE_CONFIG") + if config : + copyrightHolder, license = config.split("|") + else : + if email.endswith("isode.com") or email in ["git@el-tramo.be", "git@kismith.co.uk", "tm@ayena.de"] : + copyrightHolder, license = "Isode Limited", "default" + else : + copyrightHolder, license = username, "mit" + return Copyright(copyrightHolder, datetime.date.today().year, license) def check_copyright(filename, hints) : - copyrightBlocks = parse_file_new(filename) - if copyrightBlocks : - # looking for copyright block for current author - username, email = get_userinfo() - copyrightSetting = get_copyright_setting(username, email) - for block in copyrightBlocks : - if block.author.content == copyrightSetting.author: - year = block.yearBegin.content if not block.yearEnd else block.yearEnd.content - if int(year) == copyrightSetting.year: - return True - else : - if hints : - print "Copyright block for " + copyrightSetting.author + " does not cover current year in: " + filename - return False - if hints : - print "Missing copyright block for " + copyrightSetting.author + " in: " + filename - return False - else : - if hints : - print "No copyright found in: " + filename - return False + copyrightBlocks = parse_file_new(filename) + if copyrightBlocks : + # looking for copyright block for current author + username, email = get_userinfo() + copyrightSetting = get_copyright_setting(username, email) + for block in copyrightBlocks : + if block.author.content == copyrightSetting.author: + year = block.yearBegin.content if not block.yearEnd else block.yearEnd.content + if int(year) == copyrightSetting.year: + return True + else : + if hints : + print "Copyright block for " + copyrightSetting.author + " does not cover current year in: " + filename + return False + if hints : + print "Missing copyright block for " + copyrightSetting.author + " in: " + filename + return False + else : + if hints : + print "No copyright found in: " + filename + return False def replace_data_in_file(filename, begin, end, replaceWith) : - with open(filename, 'r') as file: - content = file.read() - with open(filename, 'w') as file: - file.write(content[:begin] + replaceWith + content[end:]) + with open(filename, 'r') as file: + content = file.read() + with open(filename, 'w') as file: + file.write(content[:begin] + replaceWith + content[end:]) def set_or_update_copyright(filename) : - if check_copyright(filename, False) : - print "No update required for file: " + filename - else : - copyrightBlocks = parse_file_new(filename) - username, email = get_userinfo() - copyrightSetting = get_copyright_setting(username, email) - lastBlock = 0 - for block in copyrightBlocks : - if block.author.content == copyrightSetting.author : - if not block.yearEnd : - # replace year with range - replace_data_in_file(filename, block.yearBegin.begin, block.yearBegin.end, "%s-%s" % (block.yearBegin.content, str(copyrightSetting.year))) - else : - # replace end of range with current year - replace_data_in_file(filename, block.yearEnd.begin, block.yearEnd.end, "%s" % str(copyrightSetting.year)) - return - lastBlock = block.total.end - - # No copyright block found. Append a new one. - replace_data_in_file(filename, lastBlock+1, lastBlock+1, "\n" + str(copyrightSetting)) + if check_copyright(filename, False) : + print "No update required for file: " + filename + else : + copyrightBlocks = parse_file_new(filename) + username, email = get_userinfo() + copyrightSetting = get_copyright_setting(username, email) + lastBlock = 0 + for block in copyrightBlocks : + if block.author.content == copyrightSetting.author : + if not block.yearEnd : + # replace year with range + replace_data_in_file(filename, block.yearBegin.begin, block.yearBegin.end, "%s-%s" % (block.yearBegin.content, str(copyrightSetting.year))) + else : + # replace end of range with current year + replace_data_in_file(filename, block.yearEnd.begin, block.yearEnd.end, "%s" % str(copyrightSetting.year)) + return + lastBlock = block.total.end + + # No copyright block found. Append a new one. + replace_data_in_file(filename, lastBlock+1, lastBlock+1, "\n" + str(copyrightSetting)) def print_help() : - print """Usage: - Copyrighter.py check-copyright $filename - Cheks for the existence of a copyright comment block. + print """Usage: + Copyrighter.py check-copyright $filename + Cheks for the existence of a copyright comment block. - Copyrighter.py set-copyright $filename - Adds or updates the existing copyright comment block. + Copyrighter.py set-copyright $filename + Adds or updates the existing copyright comment block. - License setting: - A users license configuration can be set via the SWIFT_LICENSE_CONFIG environment variable - in the format "$copyright holder|$license", e.g. "Jane Doe|mit". Possible values for - $license are default, mit and gpl. - """ + License setting: + A users license configuration can be set via the SWIFT_LICENSE_CONFIG environment variable + in the format "$copyright holder|$license", e.g. "Jane Doe|mit". Possible values for + $license are default, mit and gpl. + """ if sys.argv[1] == "check-copyright" : - file = sys.argv[2] - if (file.endswith(".cpp") or file.endswith(".h")) and not "3rdParty" in file : - if not check_copyright(file, True) : - sys.exit(-1) + file = sys.argv[2] + if (file.endswith(".cpp") or file.endswith(".h")) and not "3rdParty" in file : + if not check_copyright(file, True) : + sys.exit(-1) elif sys.argv[1] == "set-copyright" : - file = sys.argv[2] - set_or_update_copyright(file) + file = sys.argv[2] + set_or_update_copyright(file) else : - print "Unknown command: " + sys.argv[1] - print_help() - sys.exit(-1) + print "Unknown command: " + sys.argv[1] + print_help() + sys.exit(-1) |