用于向源文件添加许可证标头的工具?
时间:2020-03-06 14:54:20 来源:igfitidea点击:
我正在寻找一种工具,该工具将向大量源文件添加许可证标头,其中一些源文件已经具有标头。是否有工具可以插入标头(如果尚不存在)?
编辑:我故意不标记此问题的答案,因为答案基本上都是针对特定环境且主观的
解决方案
Python解决方案,根据需要进行修改
特征:
- 处理UTF标头(对于大多数IDE都很重要)
- 通过给定的掩码递归地更新目标目录中的所有文件(为语言(.c,.java,.. etc)的文件掩码修改.endswith参数
- 能够覆盖先前的版权文本(为此提供旧的版权参数)
- 可以选择省略excludeirir数组中给出的目录
--
# 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()
#!/bin/bash
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
这是一个Bash脚本,如果我们在文件license.txt中具有许可证标头,便可以完成此操作:
文件addlicense.sh:
#!/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 | cut -f1 -d ' '` find . -type f \(-name \*.cpp -o -name \*.h \) -print0 | xargs -0 ./addlicense.sh
对于Java,请http://code.google.com/p/maven-license-plugin/
亲切的问候
这是我在Apache列表中找到的一个。它是用Ruby编写的,似乎很容易阅读。我们甚至应该可以从rake调用它,以获得额外的特殊乐趣。 :)
如果我们仍然需要一个,我已经写了一个小工具,名为SrcHead。我们可以在http://www.solvasoft.nl/downloads.html上找到它

