158 lines
3.4 KiB
Python
Executable File
158 lines
3.4 KiB
Python
Executable File
#!/usr/bin/python2
|
|
|
|
from subprocess import *
|
|
from sys import *
|
|
from os import rename, remove
|
|
from datetime import *
|
|
|
|
def pretty_years(s):
|
|
|
|
l = list(s)
|
|
l.sort()
|
|
|
|
start = None
|
|
prev = None
|
|
r = []
|
|
|
|
for x in l:
|
|
if prev is None:
|
|
start = x
|
|
prev = x
|
|
continue
|
|
|
|
if x == prev + 1:
|
|
prev = x
|
|
continue
|
|
|
|
if prev == start:
|
|
r.append("%i" % prev)
|
|
else:
|
|
r.append("%i-%i" % (start, prev))
|
|
|
|
start = x
|
|
prev = x
|
|
|
|
if not prev is None:
|
|
if prev == start:
|
|
r.append("%i" % prev)
|
|
else:
|
|
r.append("%i-%i" % (start, prev))
|
|
|
|
return ", ".join(r)
|
|
|
|
def order_by_year(a, b):
|
|
|
|
la = list(a[2])
|
|
la.sort()
|
|
|
|
lb = list(b[2])
|
|
lb.sort()
|
|
|
|
if la[0] < lb[0]:
|
|
return -1
|
|
elif la[0] > lb[0]:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
def gen_copyrights(f):
|
|
|
|
commits = []
|
|
data = {}
|
|
copyrights = []
|
|
|
|
for ln in Popen(["git", "blame", "--incremental", f], stdout=PIPE).stdout:
|
|
|
|
if ln.startswith("filename "):
|
|
if len(data) > 0:
|
|
commits.append(data)
|
|
data = {}
|
|
|
|
elif ln.startswith("author "):
|
|
data["author"] = ln[7:].strip()
|
|
|
|
elif ln.startswith("author-mail <"):
|
|
data["author-mail"] = ln[12:].strip()
|
|
|
|
elif ln.startswith("author-time "):
|
|
data["author-time"] = ln[11:].strip()
|
|
|
|
elif ln.startswith("author-tz "):
|
|
data["author-tz"] = ln[9:].strip()
|
|
|
|
with open(f,'r') as fi:
|
|
fil = fi.readlines()
|
|
for i in fil:
|
|
if -1 < i.find("Original Author"):
|
|
da = i.split(" ")
|
|
print f
|
|
copyrights.append(" Copyright %s, %s %s\n" % (da[3].strip(), da[1], da[2]))
|
|
|
|
by_author = {}
|
|
|
|
for c in commits:
|
|
try:
|
|
n = by_author[c["author"]]
|
|
except KeyError:
|
|
n = (c["author"], c["author-mail"], set())
|
|
by_author[c["author"]] = n
|
|
|
|
# FIXME: Handle time zones properly
|
|
year = datetime.fromtimestamp(int(c["author-time"])).year
|
|
|
|
n[2].add(year)
|
|
|
|
for an, a in list(by_author.iteritems()):
|
|
for bn, b in list(by_author.iteritems()):
|
|
if a is b:
|
|
continue
|
|
|
|
if a[1] == b[1]:
|
|
a[2].update(b[2])
|
|
|
|
if by_author.has_key(an) and by_author.has_key(bn):
|
|
del by_author[bn]
|
|
|
|
copyright = list(by_author.itervalues())
|
|
copyright.sort(order_by_year)
|
|
|
|
for name, mail, years in copyright:
|
|
copyrights.append(" Copyright %s, %s %s\n" % (pretty_years(years), name, mail))
|
|
return copyrights
|
|
|
|
def change_file(filename):
|
|
content=[]
|
|
out=[]
|
|
extended=0
|
|
ends=0
|
|
with open(filename, "r") as fi:
|
|
content=fi.readlines()
|
|
|
|
copyrights=gen_copyrights(filename)
|
|
|
|
if -1 == content[0].find("/* This file is part of Clementine."):
|
|
print("File {} have no Clementine copyright info".format(filename))
|
|
return 0
|
|
|
|
for i in content:
|
|
if i.find("*/") != -1:
|
|
ends = 1
|
|
if i.find("Copyright ") != -1:
|
|
if not extended:
|
|
out.extend(copyrights)
|
|
extended = 1
|
|
|
|
if not ends:
|
|
continue
|
|
else:
|
|
out.append(i)
|
|
|
|
with open(filename+'_tmp', "w") as fi:
|
|
fi.writelines(out)
|
|
rename(filename+'_tmp', filename)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
for files in argv[1:]:
|
|
change_file(files)
|