blob: 6b14fde6847f7c6af9f306d56e9e081e8e28572a [file] [log] [blame] [raw]
# -*- coding: utf-8 -*-
from os import listdir, path, chdir, walk
from re import compile, match, sub, error
from datetime import datetime
from itertools import chain
if __name__ == '__main__':
def_name = 'Matt Godbolt'
# Has to be called from the local folder. This should be improved
chdir('../../')
# ?1: Comment slash; 2: Copyright mark; ?3: Starting year; 4: Current year; ?5: Comma separator; ?6: Names
license_re = compile(r'(// )?(Copyright \(c\) )(2012-)?(\d*)(,)?( ?.*)')
year = datetime.utcnow().year
non_recursive_searched_paths = ['static/', 'test/', 'test/handlers/', 'test/compilers/']
recursive_searched_paths = ['lib/']
ignored_files = set(['static/ansi-to-html.js', 'static/gccdump-view.js', 'static/gccdump-rtl-gimple-mode.js'])
found_paths = ['./app.js', './LICENSE']
for root in non_recursive_searched_paths:
found_paths.extend(path.join(root, file_name) for file_name in listdir(root) if file_name.endswith('.js'))
for root, _, files in chain.from_iterable(walk(file_path) for file_path in recursive_searched_paths):
found_paths.extend(path.join(root, file_name) for file_name in files if file_name.endswith('.js'))
found_paths = [file for file in found_paths if file not in ignored_files]
change_count = 0
for path in found_paths:
try:
file_lines = []
with open(path, 'r') as f:
for line in f.readlines():
res = match(license_re, line)
subbed_line = line
try:
if res:
sub_re = r'{}Copyright (c) 2012-{}, {}'.format(res.group(1) or '', year, res.group(6).strip() if res.group(6) else def_name)
subbed_line = sub(license_re, sub_re, line)
change_count += 1
except error as e:
print 'Regex exception "{}" raised in {}\n'.format(e, path)
finally:
file_lines.append(subbed_line)
with open(path, 'w+') as f:
for line in file_lines:
f.write(line)
except OSError as os_error:
print 'OS error: {}'.format(os_error)
print 'Validated {} files out of {}'.format(change_count, len(found_paths))