From 3857f9ff974ea0cee327f20c33417d82852d1304 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Fri, 2 Dec 2016 19:09:11 +0000 Subject: [PATCH] tools: drop cmd_check.py CLI defuns are static so the compiler catches unused definitions, ergo no longer necessary to have a script for this. Signed-off-by: Quentin Young --- tools/cmd_check.py | 102 --------------------------------------------- 1 file changed, 102 deletions(-) delete mode 100755 tools/cmd_check.py diff --git a/tools/cmd_check.py b/tools/cmd_check.py deleted file mode 100755 index bfe90c4392..0000000000 --- a/tools/cmd_check.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/python3 -# Command Checker -# Copyright (C) 2016 Cumulus Networks, Inc. -# -# This file is part of Quagga. -# -# Quagga 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, or (at your option) any -# later version. -# -# Quagga 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 Quagga; see the file COPYING. If not, write to the Free -# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. -# - -# Parses a source file, ensuring that CLI definitions (DEFUNs, ALIASs, etc) -# have install_command called on them at some point. -import sys -import glob -import re -import os -from pprint import pprint - -# patterns used to extract commands -command_patterns = [ - r'DEF.*\(.*\n\s*([0-9a-z_]*_cmd)', - r'ALIAS.*\(.*\n\s*([0-9a-z_]*_cmd)', -] - -# patterns that count as installing the command -install_patterns = [ - r'install_element.*\(.*{0}', - r'INSTALL.*\(.*{0}' -] - -def process(filename): - cmds = [] - uninstalled = [] - sourcetext = '' - headertext = '' - - # read source file and header file - with open(filename) as cf: - try: - sourcetext = cf.read() - headerfile = filename.replace('.c', '.h') - if os.path.isfile(headerfile): - with open(headerfile) as hf: - headertext = hf.read() - except: - print('Error reading {0}, skipping'.format(filename)) - return - - # build list of defined commands that aren't mentioned in header - for pattern in command_patterns: - matches = re.findall(pattern, sourcetext, re.M) - cmds += filter(lambda x: re.search(x, headertext) is None, matches) - - # build list of not installed commands - for cmd in cmds: - pats = [ ip.format(cmd) for ip in install_patterns ] - if all([ re.search(pat, sourcetext) is None for pat in pats ]): - uninstalled.append(cmd) - - if len(uninstalled) > 0: - print('\033[92m', end='') - print('{0}'.format(filename)) - print('\033[0m', end='') - for cmd in uninstalled: - print(' {0}'.format(cmd)) - print('') - -usage = """ -Usage: - ./cmd_check.py [...] - - where 'path' is a C source file or directory - containing C source files -""" - -if __name__ == '__main__': - if len(sys.argv) < 2: - print(usage) - exit() - - cwd = os.getcwd() - for arg in sys.argv[1:]: - # collect all c files - globstr = arg - if os.path.isdir(arg): - os.chdir(arg) - globstr = '*.c' - for filename in glob.glob(globstr): - process(filename) - os.chdir(cwd) -- 2.39.5