X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=scripts%2Fupdate_copyright.py;fp=scripts%2Fupdate_copyright.py;h=7354dab8ce8fdf10edd3cd2336d5ff157b01fffa;hb=e8462f7431582627e44906239077f1c696eefba1;hp=0000000000000000000000000000000000000000;hpb=9bdb753c5363d92b7e5698d75a967dc1fbc76b1a;p=ctsim.git diff --git a/scripts/update_copyright.py b/scripts/update_copyright.py new file mode 100755 index 0000000..7354dab --- /dev/null +++ b/scripts/update_copyright.py @@ -0,0 +1,168 @@ +#!/usr/bin/python + +''' +This script updates the copyright license lines for all files within a +particular directory. + +usage: + $ python scripts/update_copyright.py +''' + +import os +import sys +import re + +def usage(): + print __doc__ + +if len(sys.argv) != 2: + sys.stderr.write("error: please provide an input directory\n") + usage() + sys.exit(-1) +elif sys.argv[1] in ('-h','--help'): + usage() + sys.exit(0) + +# new copyright +newcopy = '''\ +Copyright (c) 2007 - 2015 Joseph Gaeddert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.'''.splitlines() + +# add new line character to end of each line +for i in xrange(len(newcopy)): + newcopy[i] += '\n' + +rootdir = sys.argv[1] + +# specific files to ignore +ignore_files = ['update_copyright.py',] + +# directories to ignore +ignore_directories = ['.git',] + +# only look at these extensions +include_extensions = ['.h', '.c', '.md', '.tex', '.ac', '.in', '.m',] + +# print alignment for status +align = 56 + +# +def update_copyright(filename=""): + """ + Update copyright on file. + """ + # try to open file + contents = [] + with open( filename, 'r' ) as f: + # read lines from file (removing newline character at end) + for line in f: + #contents.append(line.strip('\n\r')) + contents.append(line) + + # parse contents + index_start = -1 + index_stop = -1 + + # search for copyright; starts at top of file + for i in range(min(10, len(contents))): + if re.search(r'Copyright .* Joseph Gaeddert',contents[i]): + index_start = i + break + + if index_start == -1: + print " " + filename + ":" + " "*(align-len(filename)) + "no copyright found" + return + + # look for end of copyright + #for i in range(index_start+15,index_start+15+min(10, len(contents))): + i = index_start + 15 + if re.search(r'along with liquid. If not, see',contents[i]): + index_stop = i + elif re.search(r'AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM',contents[i]): + print " " + filename + ":" + " "*(align-len(filename)) + "copyright already updated" + return + else: + print " " + filename + ":" + " "*(align-len(filename)) + "could not find end of copyright" + return + + # check comment type + m = re.search(r'^( \*|#+) +Copyright',contents[index_start]) + if m: + comment = m.group(1) + else: + raise Exception('unexpected error') + + # delete items in list + contents.__delslice__(index_start, index_stop+1) + + # insert new copyright + for i in range(len(newcopy)): + # only add space after comment characters if string is not empty + # (e.g. print ' *' instead of ' * ') + space = ' ' if len(newcopy[i].strip()) > 0 else '' + + # insert new comment + contents.insert(index_start+i, comment + space + newcopy[i]) + + # open original file for writing + with open( filename, 'w' ) as f: + for line in contents: + f.write(line) + + print " " + filename + ":" + " "*(align-len(filename)) + "updated" + +# +for root, subFolders, files in os.walk(rootdir): + + # strip off leading './' if it exists + if root.startswith('./'): + root = root[2:] + + # print root directory + print root + + # ignore certain directories + if root in ignore_directories: + print "(skipping directory)" + continue + + # print subfolders + #for folder in subFolders: + # print "%s has subdirectory %s" % (root, folder) + + # parse each filename in directory + for filename in files: + filePath = os.path.join(root, filename) + + # check filename + if filePath in ignore_files: + print " " + filePath + ":" + " "*(align-len(filePath)) + "ignoring this specific file" + continue; + + # check filename extension + baseName, extension = os.path.splitext(filename) + if extension not in include_extensions: + print " " + filePath + ":" + " "*(align-len(filePath)) + "improper extension; ignoring file" + continue; + + # continue on with this file + update_copyright(filePath) + +