Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- for i in *.cc # or whatever other pattern...
- do
- if ! grep -q Copyright $i
- then
- cat copyright.txt $i >$i.new && mv $i.new $i
- fi
- done
- #!/bin/bash
- for x in $*; do
- head -$LICENSELEN $x | diff license.txt - || ( ( cat license.txt; echo; cat $x) > /tmp/file; mv /tmp/file $x )
- done
- export LICENSELEN=`wc -l license.txt | sed 's/[^0-9]//g`
- find dir -type f -name ( *.cpp -o -type *.h ) -print0 | xargs -0 ./addlicense.sh
- # updates the copyright information for all .cs files
- # usage: call recursive_traversal, with the following parameters
- # parent directory, old copyright text content, new copyright text content
- import os
- excludedir = ["..\Lib"]
- def update_source(filename, oldcopyright, copyright):
- utfstr = chr(0xef)+chr(0xbb)+chr(0xbf)
- fdata = file(filename,"r+").read()
- isUTF = False
- if (fdata.startswith(utfstr)):
- isUTF = True
- fdata = fdata[3:]
- if (oldcopyright != None):
- if (fdata.startswith(oldcopyright)):
- fdata = fdata[len(oldcopyright):]
- if not (fdata.startswith(copyright)):
- print "updating "+filename
- fdata = copyright + fdata
- if (isUTF):
- file(filename,"w").write(utfstr+fdata)
- else:
- file(filename,"w").write(fdata)
- def recursive_traversal(dir, oldcopyright, copyright):
- global excludedir
- fns = os.listdir(dir)
- print "listing "+dir
- for fn in fns:
- fullfn = os.path.join(dir,fn)
- if (fullfn in excludedir):
- continue
- if (os.path.isdir(fullfn)):
- recursive_traversal(fullfn, oldcopyright, copyright)
- else:
- if (fullfn.endswith(".cs")):
- update_source(fullfn, oldcopyright, copyright)
- oldcright = file("oldcr.txt","r+").read()
- cright = file("copyrightText.txt","r+").read()
- recursive_traversal("..", oldcright, cright)
- exit()
- #!/usr/bin/python
- """
- This script attempts to add a header to each file in the given directory
- The header will be put the line after a Shebang (#!) if present.
- If a line starting with a regular expression 'skip' is present as first line or after the shebang it will ignore that file.
- If filename is given only files matchign the filename regex will be considered for adding the license to,
- by default this is '*'
- usage: python addheader.py headerfile directory [filenameregex [dirregex [skip regex]]]
- easy example: add header to all files in this directory:
- python addheader.py licenseheader.txt .
- harder example adding someone as copyrightholder to all python files in a source directory,exept directories named 'includes' where he isn't added yet:
- python addheader.py licenseheader.txt src/ ".*.py" "^((?!includes).)*$" "#Copyright .* Jens Timmerman*"
- where licenseheader.txt contains '#Copyright 2012 Jens Timmerman'
- """
- import os
- import re
- import sys
- def writeheader(filename,header,skip=None):
- """
- write a header to filename,
- skip files where first line after optional shebang matches the skip regex
- filename should be the name of the file to write to
- header should be a list of strings
- skip should be a regex
- """
- f = open(filename,"r")
- inpt =f.readlines()
- f.close()
- output = []
- #comment out the next 3 lines if you don't wish to preserve sbebangs
- if len(inpt) > 0 and inpt[0].startswith("#!"):
- output.append(inpt[0])
- inpt = inpt[1:]
- if skip and skip.match(inpt[0]): #skip matches, so skip this file
- return
- output.extend(header) #add the header
- for line in inpt:
- output.append(line)
- try:
- f = open(filename,'w')
- f.writelines(output)
- f.close()
- print "added header to %s" %filename
- except IOError,err:
- print "something went wrong trying to add header to %s: %s" % (filename,err)
- def addheader(directory,header,skipreg,filenamereg,dirregex):
- """
- recursively adds a header to all files in a dir
- arguments: see module docstring
- """
- listing = os.listdir(directory)
- print "listing: %s " %listing
- #for each file/dir in this dir
- for i in listing:
- #get the full name, this way subsubdirs with the same name don't get ignored
- fullfn = os.path.join(directory,i)
- if os.path.isdir(fullfn): #if dir, recursively go in
- if (dirregex.match(fullfn)):
- print "going into %s" % fullfn
- addheader(fullfn, header,skipreg,filenamereg,dirregex)
- else:
- if (filenamereg.match(fullfn)): #if file matches file regex, write the header
- writeheader(fullfn, header,skipreg)
- def main(arguments=sys.argv):
- """
- main function: parses arguments and calls addheader
- """
- ##argument parsing
- if len(arguments) > 6 or len(arguments) < 3:
- sys.stderr.write("Usage: %s headerfile directory [filenameregex [dirregex [skip regex]]]n"
- "Hint: '.*' is a catch all regexnHint:'^((?!regexp).)*$' negates a regexn"%sys.argv[0])
- sys.exit(1)
- skipreg = None
- fileregex = ".*"
- dirregex = ".*"
- if len(arguments) > 5:
- skipreg = re.compile(arguments[5])
- if len(arguments) > 3:
- fileregex = arguments[3]
- if len(arguments) > 4:
- dirregex = arguments[4]
- #compile regex
- fileregex = re.compile(fileregex)
- dirregex = re.compile(dirregex)
- #read in the headerfile just once
- headerfile = open(arguments[1])
- header = headerfile.readlines()
- headerfile.close()
- addheader(arguments[2],header,skipreg,fileregex,dirregex)
- #call the main method
- main()
Add Comment
Please, Sign In to add comment