Browse Source

[devtools] Rewrite fix-copyright-headers.py

tags/v0.15.1
MarcoFalke 5 years ago
parent
commit
fa6ad855e9
2 changed files with 35 additions and 42 deletions
  1. 4
    4
      contrib/devtools/README.md
  2. 31
    38
      contrib/devtools/fix-copyright-headers.py

+ 4
- 4
contrib/devtools/README.md View File

@@ -11,16 +11,16 @@ fix-copyright-headers.py
========================

Every year newly updated files need to have its copyright headers updated to reflect the current year.
If you run this script from src/ it will automatically update the year on the copyright header for all
.cpp and .h files if these have a git commit from the current year.
If you run this script from the root folder it will automatically update the year on the copyright header for all
source files if these have a git commit from the current year.

For example a file changed in 2014 (with 2014 being the current year):
For example a file changed in 2015 (with 2015 being the current year):

```// Copyright (c) 2009-2013 The Bitcoin Core developers```

would be changed to:

```// Copyright (c) 2009-2014 The Bitcoin Core developers```
```// Copyright (c) 2009-2015 The Bitcoin Core developers```

git-subtree-check.sh
====================

+ 31
- 38
contrib/devtools/fix-copyright-headers.py View File

@@ -1,53 +1,46 @@
#!/usr/bin/env python
'''
Run this script inside of src/ and it will look for all the files
that were changed this year that still have the last year in the
copyright headers, and it will fix the headers on that file using
a perl regex one liner.
Run this script to update all the copyright headers of files
that were changed this year.

For example: if it finds something like this and we're in 2014
For example:

// Copyright (c) 2009-2013 The Bitcoin Core developers
// Copyright (c) 2009-2012 The Bitcoin Core developers

it will change it to

// Copyright (c) 2009-2014 The Bitcoin Core developers

It will do this for all the files in the folder and its children.

Author: @gubatron
// Copyright (c) 2009-2015 The Bitcoin Core developers
'''
import os
import time
import re

year = time.gmtime()[0]
last_year = year - 1
command = "perl -pi -e 's/%s The Bitcoin/%s The Bitcoin/' %s"
listFilesCommand = "find . | grep %s"

extensions = [".cpp",".h"]

def getLastGitModifiedDate(filePath):
gitGetLastCommitDateCommand = "git log " + filePath +" | grep Date | head -n 1"
p = os.popen(gitGetLastCommitDateCommand)
result = ""
for l in p:
result = l
break
result = result.replace("\n","")
return result
CMD_GIT_DATE = "git log %s | grep Date | head -n 1"
CMD_REGEX= "perl -pi -e 's/(20\d\d)(?:-20\d\d)? The Bitcoin/$1-%s The Bitcoin/' %s"
REGEX_CURRENT= re.compile("%s The Bitcoin" % year)
CMD_LIST_FILES= "find %s | grep %s"

n=1
for extension in extensions:
foundFiles = os.popen(listFilesCommand % extension)
for filePath in foundFiles:
filePath = filePath[1:-1]
if filePath.endswith(extension):
filePath = os.getcwd() + filePath
modifiedTime = getLastGitModifiedDate(filePath)
if len(modifiedTime) > 0 and str(year) in modifiedTime:
print n,"Last Git Modified: ", modifiedTime, " - ", filePath
os.popen(command % (last_year,year,filePath))
n = n + 1
FOLDERS = ["./qa", "./src"]
EXTENSIONS = [".cpp",".h", ".py"]

def get_git_date(file_path):
r = os.popen(CMD_GIT_DATE % file_path)
for l in r:
# Result is one line, so just return
return l.replace("\n","")
return ""

n=1
for folder in FOLDERS:
for extension in EXTENSIONS:
for file_path in os.popen(CMD_LIST_FILES % (folder, extension)):
file_path = os.getcwd() + file_path[1:-1]
if file_path.endswith(extension):
git_date = get_git_date(file_path)
if len(git_date) > 0 and str(year) in git_date:
# Only update if current year is not found
if REGEX_CURRENT.search(open(file_path, "r").read()) is None:
print n,"Last git edit", git_date, "-", file_path
os.popen(CMD_REGEX % (year,file_path))
n = n + 1

Loading…
Cancel
Save