123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- # ##### 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",
- "tests", # not this dir
- )
- def is_c_header(filename):
- ext = splitext(filename)[1]
- return (ext in {".h", ".hpp", ".hxx", ".hh"})
- 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 '.git'
- dirnames[:] = [d for d in dirnames if not d.startswith(".")]
- 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()
|