IAP GITLAB

Skip to content
Snippets Groups Projects
do-copyright.py 2.6 KiB
Newer Older
#!/usr/bin/python

import os.path

text = """
ralfulrich's avatar
ralfulrich committed
 * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
 *
 * See file AUTHORS for a list of contributors.
 *
 * This software is distributed under the terms of the GNU General Public
 * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
 * the license.
 */\n
"""

excludeDirs = ["ThirdParty", "git"]
excludeFiles = ['PhysicalConstants.h']

extensions = [".cc", ".h", ".test"]

def checkNote(filename):

    startNote = -1
    endNote = -1
    isCopyright = False
    lines = []

    with open(filename, "r") as file:
        for line in file.readlines():
            lines.append(line)            
        file.close()

            
    for iLine in range(len(lines)):
        line = lines[iLine]
        if "/**" in line and startNote == -1:
            startNote = iLine
        if "copyright" in line.lower() and startNote>=0 and endNote==-1:
            isCopyright = True
        if "*/" in line and startNote>=0 and endNote==-1:
            endNote = iLine
        iLine += 1

    # now check if copyright notice is already there and identical...
    isSame = False
    if startNote>=0 and endNote>=0 and isCopyright:
        isSame = True
        noteLines = text.split('\n')        
        for iLine in range(len(noteLines)-2):
            if startNote+iLine >= len(lines):
                break            
            if noteLines[iLine+1].strip(" \n") != lines[startNote+iLine].strip(" \n"):
                isSame = False
                print "not same: " + filename + " new=\'" + noteLines[iLine+1] + "\' vs old=\'" + lines[startNote+iLine].rstrip('\n') + "\'"
                break

    # check if notice is the same 
    if isSame:
        return                
    # add (new) copyright notice here:
        
    os.rename(filename, filename+".bak")

    with open(filename, "w") as file:

        file.write(text)

        firstLine = 0
        if startNote>=0 and endNote>=0 and isCopyright:
            firstLine = endNote + 2

        for iLine in range(firstLine, len(lines)):
            file.write(lines[iLine])
        
        file.close()


def next_file(x, dir_name, files):
    for check in excludeDirs :
        if check in dir_name:
            return
    for check in files :
        filename, file_extension = os.path.splitext(check)
        if '#' in check or '~' in check:
            return
        for check2 in excludeFiles :
            if check2 in check:
                return
        if file_extension in extensions:
            checkNote(dir_name + "/" + check)


os.path.walk("./", next_file, 0)