mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python
 | 
						|
from subprocess import check_output as run
 | 
						|
from datetime import datetime
 | 
						|
from itertools import groupby
 | 
						|
from operator import itemgetter
 | 
						|
import re
 | 
						|
import magic
 | 
						|
 | 
						|
def authors(filename):
 | 
						|
    log = run(['git', 'log', '--follow',
 | 
						|
              '--date=short','--format=%aN%x09%ad', filename],
 | 
						|
              universal_newlines=True)
 | 
						|
    for line in log.splitlines():
 | 
						|
        author, date = line.split('\t')
 | 
						|
        if author != 'fix-copyright.py':
 | 
						|
            yield author, datetime.strptime(date, '%Y-%m-%d')
 | 
						|
 | 
						|
def new_copyright(filename, previous):
 | 
						|
    def f():
 | 
						|
        au = list(authors(filename))
 | 
						|
        alldates = map(itemgetter(1), au)
 | 
						|
        aup = sorted(au + map(lambda a: (a, None), previous), key=itemgetter(0))
 | 
						|
        for author, records in groupby(aup, itemgetter(0)):
 | 
						|
            dates = filter(None, map(itemgetter(1), records))
 | 
						|
            if not dates: dates = alldates
 | 
						|
            start = min(dates)
 | 
						|
            end = max(dates)
 | 
						|
            fmt = '{0}' if start.year == end.year else '{0}-{1}'
 | 
						|
            line = 'Copyright ' + fmt.format(start.year, end.year) + ' ' + author
 | 
						|
            key = (start, author)
 | 
						|
            yield key, line
 | 
						|
    return map(itemgetter(1), sorted(f()))
 | 
						|
 | 
						|
def fix_copyright(filename):
 | 
						|
    # Find copyright block in original file
 | 
						|
    prefix = set()
 | 
						|
    names = []
 | 
						|
    lines = []
 | 
						|
    with open(filename, 'r') as f:
 | 
						|
        content = list(f)
 | 
						|
    for i, line in enumerate(content[:15]):
 | 
						|
        m = re.match(r'^(?P<prefix>\W*)(\(c\))?\s*?copyright\s*(\(c\))?\s+\d{4}(\s*-\s*\d{4})?\s+(?P<name>.+?)\s*$', line, re.IGNORECASE)
 | 
						|
        if m:
 | 
						|
            d = m.groupdict()
 | 
						|
            prefix.add(d['prefix'])
 | 
						|
            lines.append(i)
 | 
						|
            names.append(d['name'].strip())
 | 
						|
    if len(prefix) != 1:
 | 
						|
        print 'Not found:', filename
 | 
						|
        return
 | 
						|
    prefix = list(prefix)[0]
 | 
						|
 | 
						|
    print filename
 | 
						|
    new = iter(new_copyright(filename, names))
 | 
						|
    with open(filename, 'w') as f:
 | 
						|
        for i, line in enumerate(content):
 | 
						|
            if i in lines:
 | 
						|
                for repl in new:
 | 
						|
                    print >>f, prefix + repl
 | 
						|
            else:
 | 
						|
                print >>f, line,
 | 
						|
    pass
 | 
						|
 | 
						|
def all_files():
 | 
						|
    ls = run(['git', 'ls-files'], universal_newlines=True)
 | 
						|
    for filename in ls.splitlines():
 | 
						|
        if magic.from_file(filename, mime=True).split('/')[0] == 'text':
 | 
						|
            yield filename
 | 
						|
 | 
						|
for f in all_files():
 | 
						|
    fix_copyright(f)
 |