#!/usr/bin/env python import os, sys, shutil, fnmatch, re, glob # # Program usage. # def usage(): print "Usage: " + sys.argv[0] + " [options] [path]" print print "Options:" print "-h Show this message." print # # Returns the new copyright # def copyright(commentMark): result = [ ] result.append(commentMark) result.append(" **********************************************************************\n") result.append(commentMark) result.append("\n") result.append(commentMark) result.append(" Copyright (c) 2003 - 2004\n") result.append(commentMark) result.append(" ZeroC, Inc.\n") result.append(commentMark) result.append(" North Palm Beach, FL, USA\n") result.append(commentMark) result.append("\n") result.append(commentMark) result.append(" All Rights Reserved.\n") result.append(commentMark) result.append("\n") result.append(commentMark) result.append(" This copy of Ice is licensed to you under the terms described in the\n") result.append(commentMark) result.append(" ICE_LICENSE file included in this distribution.\n") result.append(commentMark) result.append("\n") result.append(commentMark) result.append(" **********************************************************************\n") return result # # Replace one copyright # def replaceCopyright(file, commentMark, commentBegin, commentEnd, newCopyrightLines): oldFile = open(file, "r") oldLines = oldFile.readlines() done = 0 commentFound = 0 copyrightFound = 0 beforeCopyrightLines = [] newLines = [] if commentBegin == "": for x in oldLines: if not commentFound and not x.startswith(commentMark): beforeCopyrightLines.append(x) elif not done and x.startswith(commentMark): commentFound = 1 if not copyrightFound and x.lower().find("copyright") != -1: copyrightFound = 1 # skip this comment line else: done = 1 newLines.append(x) else: for x in oldLines: if not done: if x.startswith(commentBegin): commentFound = 1 if commentFound: if not copyrightFound and x.find("Copyright") != -1: copyrightFound = 1 # skip this comment line if x.find(commentEnd) != -1: done = 1 else: beforeCopyrightLines.append(x) else: newLines.append(x) oldFile.close() if copyrightFound: origFile = file + ".orig" shutil.copy2(file, origFile) newFile = open(file, "w") newFile.writelines(beforeCopyrightLines) newFile.writelines(newCopyrightLines) # # Hack to keep the .err files # if fnmatch.fnmatch(file, "*test/Slice/errorDetection/*.ice") != -1: newFile.write("\n") newFile.writelines(newLines) newFile.close() return copyrightFound # # Replace alls copyrights # def replaceAllCopyrights(path): cppCopyright = copyright("//") mcCopyright = copyright("; //") makefileCopyright = copyright("#") pythonCopyright = [] pythonCopyright.append("#!/usr/bin/env python\n"); pythonCopyright.extend(makefileCopyright) xmlCopyright = [] xmlCopyright.append("\n"); files = os.listdir(path) for x in files: fullpath = os.path.join(path, x); if x == "CVS": print "Skipping CVS directory" elif os.path.isdir(fullpath) and not os.path.islink(fullpath): replaceAllCopyrights(fullpath) else: commentMark = "" commentBegin = "" commentEnd = "" copyrightLines = [] skip = 0 if x == "config" or x == ".depend" or x == ".dummy" or fnmatch.fnmatch(x, "*.dsp") or fnmatch.fnmatch(x, "*.sln") or fnmatch.fnmatch(x, "*.vdproj") or fnmatch.fnmatch(x, "*.err") or fnmatch.fnmatch(x, "*.class") or fnmatch.fnmatch(x, "*.ico") or fnmatch.fnmatch(x, "*.gif") or fnmatch.fnmatch(x, "*.jpg") or fnmatch.fnmatch(x, "*.orig"): print "Skipping file " + fullpath + ": no copyright needed" skip = 1 elif fnmatch.fnmatch(x, "*.h") or fnmatch.fnmatch(x, "*.cpp") or fnmatch.fnmatch(x, "*.ice") or fnmatch.fnmatch(x, "*.java") or fnmatch.fnmatch(x, "*.l") or fnmatch.fnmatch(x, "*.y"): commentMark = "//" copyrightLines = cppCopyright elif fnmatch.fnmatch(x, "*.py"): commentMark = "#" copyrightLines = pythonCopyright elif fnmatch.fnmatch(x, "*.mc"): commentMark = "; //" copyrightLines = mcCopyright elif fnmatch.fnmatch(x, "Make*") or fnmatch.fnmatch(x, "*.properties"): commentMark = "#" copyrightLines = makefileCopyright elif x == "build.xml": commentBegin = "" copyrightLines = xmlCopyright else: print "***** Skipping file " + fullpath + ": unknown type" skip = 1 if not skip: if replaceCopyright(fullpath, commentMark, commentBegin, commentEnd, copyrightLines): print "Replaced copyright in " + fullpath else: print "***** WARNING: Did not find copyright in " + fullpath # # Main # path = "." for x in sys.argv[1:]: if x == "-h": usage() sys.exit(0) elif x.startswith("-"): print sys.argv[0] + ": unknown option `" + x + "'" print usage() sys.exit(1) else: path = x replaceAllCopyrights(path)