Skip to content
Snippets Groups Projects
check_deprecated.py 4.16 KiB
Newer Older
  • Learn to ignore specific revisions
  • # ##### 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"
    
                                  (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
    
    
        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!")
    
    
    Campbell Barton's avatar
    Campbell Barton committed