1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
import os
from os.path import splitext
DEPRECATE_DAYS = 120
SKIP_DIRS = ("extern",
"scons",
os.path.join("source", "tests"), # not this dir
)
def is_c_header(filename):
ext = splitext(filename)[1]
return (ext in (".h", ".hpp", ".hxx"))
def is_c(filename):
ext = splitext(filename)[1]
return (ext in (".c", ".cpp", ".cxx", ".m", ".mm", ".rc", ".cc", ".inl"))
def is_c_any(filename):
return is_c(filename) or is_c_header(filename)
def is_py(filename):
ext = splitext(filename)[1]
return (ext == ".py")
def is_source_any(filename):
return is_c_any(filename) or is_py(filename)
def source_list(path, filename_check=None):
for dirpath, dirnames, filenames in os.walk(path):
# skip '.svn'
if dirpath.startswith("."):
continue
for filename in filenames:
if filename_check is None or filename_check(filename):
yield os.path.join(dirpath, filename)
def deprecations():
"""
Searches out source code for lines like
/* *DEPRECATED* 2011/7/17 bgl.Buffer.list info text */
Or...
# *DEPRECATED* 2010/12/22 some.py.func more info */
"""
import datetime
SOURCE_DIR = os.path.normpath(os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", ".."))))
SKIP_DIRS_ABS = [os.path.join(SOURCE_DIR, p) for p in SKIP_DIRS]
deprecations_ls = []
scan_tot = 0
print("scanning in %r for '*DEPRECATED* YYYY/MM/DD info'" % SOURCE_DIR)
for fn in source_list(SOURCE_DIR, is_source_any):
# print(fn)
skip = False
for p in SKIP_DIRS_ABS:
if fn.startswith(p):
skip = True
break
if skip:
continue
file = open(fn, 'r', encoding="utf8")
for i, l in enumerate(file):
# logic for deprecation warnings
if '*DEPRECATED*' in l:
try:
l = l.strip()
data = l.split('*DEPRECATED*', 1)[-1].strip().strip()
data = [w.strip() for w in data.split('/', 2)]
data[-1], info = data[-1].split(' ', 1)
info = info.split("*/", 1)[0]
if len(data) != 3:
print(" poorly formatting line:\n"
" %r:%d\n"
" %s" %
(fn, i + 1, l)
)
else:
data = datetime.datetime(*tuple([int(w) for w in data]))
deprecations_ls.append((data, (fn, i + 1), info))
except:
print("Error file - %r:%d" % (fn, i + 1))
import traceback
traceback.print_exc()
scan_tot += 1
print(" scanned %d files" % scan_tot)
return deprecations_ls
def main():
import datetime
now = datetime.datetime.now()
deps = deprecations()
print("\nAll deprecations...")
for data, fileinfo, info in deps:
days_old = (now - data).days
if days_old > DEPRECATE_DAYS:
info = "*** REMOVE! *** " + info
print(" %r, days-old(%.2d), %s:%d - %s" % (data, days_old, fileinfo[0], fileinfo[1], info))
if deps:
print("\ndone!")
else:
print("\nnone found!")
if __name__ == '__main__':
main()
|