mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04: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)
 |