#!/usr/bin/env python3 import argparse import datetime import sys def readLicense(licenseFile): with open(licenseFile) as rawlicense: licensetext = rawlicense.read() # fill in the year licensetext = licensetext.replace('$CURRENTYEAR$', str(datetime.datetime.now().year)) return licensetext def hasLicense(sourceFile): with open(sourceFile) as source: if source.readline().startswith('/** LICENSE **'): return True else: return False def addLicense(sourceFile, licenseText): with open(sourceFile, 'r') as source: origData = source.read() with open(sourceFile, 'w') as source: source.write(licenseText + origData) def lint(license, src, dryRun, verbose=False): if verbose is True: print("license={0}".format(license)) print("source={0}".format(src)) # read license file licensetext = readLicense(license) if verbose is True: print("-- license text --") print(licensetext) print("-- license text --") if len(src) is 0: print("No files to process.") return 0 # open source file and check for license numFaults = 0 for filename in src: if hasLicense(filename) is True: if verbose: print("OK {0}".format(filename)) else: if dryRun is True: if verbose: print("fail {0}".format(filename)) else: addLicense(filename, licensetext) print("fix {0}".format(filename)) numFaults += 1 if numFaults is not 0: print("License check: number of faults: {0}".format(numFaults)) return numFaults if __name__ == '__main__': parser = argparse.ArgumentParser(description='check source files for license') parser.add_argument('-l', '--license', required=True, help="use this file as license header template") parser.add_argument('-v', '--verbose', action='store_true', help="print additional information") parser.add_argument('-c', '--dry-run', action='store_true', help="don't modify any files, only check for licenses") parser.add_argument('src', nargs='*', help="list of files to check") args = parser.parse_args() sys.exit(lint(args.license, args.src, args.dry_run, args.verbose))