mirror of
https://github.com/status-im/PyGithub.git
synced 2026-09-01 19:31:10 +00:00
Add a script to fix file headers
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
# Copyright 2012 Vincent Jacques vincent@vincent-jacques.net
|
||||
# Copyright 2013 Vincent Jacques vincent@vincent-jacques.net
|
||||
|
||||
################################################################################
|
||||
|
||||
# PyGithub documentation build configuration file, created by
|
||||
# sphinx-quickstart on Thu Sep 13 22:51:42 2012.
|
||||
#
|
||||
|
||||
@@ -14,21 +14,22 @@ function check {
|
||||
pep8 --ignore=E501 github setup.py || exit
|
||||
}
|
||||
|
||||
function check_copyright {
|
||||
for file in $(git ls-files | grep "py$")
|
||||
do
|
||||
git log "--format=format:# Copyright %ad %an %ae" --date=short -- $file |
|
||||
sed "s/\([0-9][0-9][0-9][0-9]\)-[0-9][0-9]-[0-9][0-9]/\1/g" | sort -u |
|
||||
while read copyright
|
||||
do
|
||||
if grep -n $file -e "^$copyright$" > /dev/null
|
||||
then
|
||||
echo > /dev/null
|
||||
else
|
||||
echo "$file should contain '$copyright'"
|
||||
fi
|
||||
done
|
||||
done
|
||||
function fix_headers {
|
||||
python scripts/fix_headers.py
|
||||
# for file in $(git ls-files | grep "py$")
|
||||
# do
|
||||
# git log "--format=format:# Copyright %ad %an %ae" --date=short -- $file |
|
||||
# sed "s/\([0-9][0-9][0-9][0-9]\)-[0-9][0-9]-[0-9][0-9]/\1/g" | sort -u |
|
||||
# while read copyright
|
||||
# do
|
||||
# if grep -n $file -e "^$copyright$" > /dev/null
|
||||
# then
|
||||
# echo > /dev/null
|
||||
# else
|
||||
# echo "$file should contain '$copyright'"
|
||||
# fi
|
||||
# done
|
||||
# done
|
||||
}
|
||||
|
||||
function test {
|
||||
|
||||
Executable
+137
@@ -0,0 +1,137 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright
|
||||
|
||||
# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/
|
||||
|
||||
# PyGithub is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
|
||||
# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Lesser General Public License along with PyGithub. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import fnmatch
|
||||
import os
|
||||
import subprocess
|
||||
import itertools
|
||||
|
||||
|
||||
license = [
|
||||
"# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/",
|
||||
"",
|
||||
"# PyGithub is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License",
|
||||
"# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.",
|
||||
"",
|
||||
"# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of",
|
||||
"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.",
|
||||
"",
|
||||
"# You should have received a copy of the GNU Lesser General Public License along with PyGithub. If not, see <http://www.gnu.org/licenses/>.",
|
||||
]
|
||||
|
||||
|
||||
class PythonHeader:
|
||||
def fix(self, filename, lines):
|
||||
isExecutable = lines[0].startswith("#!")
|
||||
newLines = []
|
||||
|
||||
if isExecutable:
|
||||
newLines.append("#!/usr/bin/env python")
|
||||
newLines.append("# -*- coding: utf-8 -*-")
|
||||
newLines.append("")
|
||||
|
||||
# @todo add <> around mails
|
||||
# @todo add ############## Copyrights and license (add sections to the header)
|
||||
|
||||
for year, name in sorted(listContributors(filename)):
|
||||
newLines.append("# Copyright " + year + " " + name)
|
||||
newLines.append("")
|
||||
|
||||
for line in license:
|
||||
newLines.append(line)
|
||||
|
||||
bodyLines = list(itertools.dropwhile(self.lineCanBeHeader, lines))
|
||||
|
||||
if len(bodyLines) > 0:
|
||||
newLines.append("")
|
||||
if "import " not in bodyLines[0] and bodyLines[0] != '"""' and not bodyLines[0].startswith("##########"):
|
||||
newLines.append("")
|
||||
|
||||
newLines += bodyLines
|
||||
|
||||
return newLines
|
||||
|
||||
def lineCanBeHeader(self, line):
|
||||
return (len(line) == 0 or line[0] == "#") and not line.startswith("##########")
|
||||
|
||||
|
||||
class StandardHeader:
|
||||
def fix(self, filename, lines):
|
||||
newLines = []
|
||||
|
||||
for year, name in sorted(listContributors(filename)):
|
||||
newLines.append("# Copyright " + year + " " + name)
|
||||
newLines.append("")
|
||||
|
||||
for line in license:
|
||||
newLines.append(line)
|
||||
|
||||
bodyLines = list(itertools.dropwhile(self.lineCanBeHeader, lines))
|
||||
|
||||
if len(bodyLines) > 0:
|
||||
newLines.append("")
|
||||
newLines += bodyLines
|
||||
|
||||
return newLines
|
||||
|
||||
def lineCanBeHeader(self, line):
|
||||
return (len(line) == 0 or line[0] == "#") and not line.startswith("##########")
|
||||
|
||||
|
||||
def listContributors(filename):
|
||||
contributors = set()
|
||||
for line in subprocess.check_output(["git", "log", "--format=format:%ad %an %ae", "--date=short", "--", filename]).split("\n"):
|
||||
year = line[0:4]
|
||||
name = line[11:]
|
||||
contributors.add((year, name))
|
||||
return contributors
|
||||
|
||||
|
||||
def findHeadersAndFiles():
|
||||
for root, dirs, files in os.walk('.', topdown=True):
|
||||
if ".git" in dirs:
|
||||
dirs.remove(".git")
|
||||
|
||||
for filename in files:
|
||||
fullname = os.path.join(root, filename)
|
||||
if filename.endswith(".py"):
|
||||
yield (PythonHeader(), fullname)
|
||||
elif filename in ["COPYING", "COPYING.LESSER"]:
|
||||
pass
|
||||
elif filename.endswith(".rst") or filename.endswith(".md"):
|
||||
pass
|
||||
elif filename == ".gitignore":
|
||||
yield (StandardHeader(), fullname)
|
||||
elif "ReplayData" in fullname:
|
||||
pass
|
||||
else:
|
||||
print "Don't know what to do with", filename
|
||||
|
||||
|
||||
def main():
|
||||
for header, filename in findHeadersAndFiles():
|
||||
print "Analyzing", filename
|
||||
with open(filename) as f:
|
||||
lines = list(line.rstrip() for line in f)
|
||||
newLines = header.fix(filename, lines)
|
||||
if newLines != lines:
|
||||
print " => actually modifying", filename
|
||||
with open(filename, "w") as f:
|
||||
for line in newLines:
|
||||
f.write(line + "\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user