checktree.sh

来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· Shell 代码 · 共 328 行

SH
328
字号
#!/bin/sh# -----------------------------------------------------------------------------# Check source-tree for anomalies## Copyright (C) 2005-2007 by Ivo van Poorten## 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 St, Fifth Floor, Boston, MA 02110-1301 USA## Thanks to Melchior Franz of the FlightGear project for the original idea# of a source-tree checker and Torinthiel for the feedback along the way.# $Id: checktree.sh,v 1.2 2008/03/03 08:11:34 dsqiu Exp $# -----------------------------------------------------------------------------# All yes/no flags. Spaces around flagnames are important!testflags=" spaces extensions crlf tabs trailws rcsid oll charset stupid gnu \res "allflags="$testflags showcont color head svn "# Default settings_spaces=yes_extensions=yes_crlf=yes_tabs=no_trailws=no_rcsid=no_oll=no_charset=no_stupid=no_showcont=no_gnu=no_res=no_color=yes_head=yes_svn=yes_files=# -----------------------------------------------------------------------------# Avoid locale problemsexport LC_ALL=C# -----------------------------------------------------------------------------# Helper functionsset_all_tests() {    for i in $testflags ; do        eval _$i=$1    done}printoption() {    test -n "$3" && def=$3 || eval def=\$_$1    echo "  -(no)$1  $2 [default: $def]"}printhead() {    test "$_head" = "yes" && echo -e "$COLB$1$COLE"}all_filenames() {    test "$_files" != "" && echo "$_files" && return    if [ "$_svn" = "no" ]; then        find . -type f \        | grep -v "\.\#\|\~$\|\.depend\|\/\.svn\/\|config.mak\|^\./config\.h" \        | grep -v "^\./version\.h\|\.o$\|\.a$\|configure.log\|^\./help_mp.h"    else        svn info -R | sed -n '/Path:/bb; :a; d; b; :b; s/Path: /.\//; h; :c; n;                              /Node Kind:/bd; bc; :d; /directory/ba; g; p;'    fi}# -----------------------------------------------------------------------------# Parse command linefor i in "$@"; do    case "$i" in    -help|--help|-h|-\?)        echo -e "\n$0 [options] [files]\n"        echo -e "options:\n"        printoption "spaces    " "test for spaces in filenames"        printoption "extensions" "test for uppercase extensions"        printoption "crlf      " "test for MSDOS line endings"        printoption "tabs      " "test for tab characters"        printoption "trailws   " "test for trailing whitespace"        printoption "rcsid     " "test for missing RCS Id's"        printoption "oll       " "test for overly long lines"        printoption "charset   " "test for wrong charset"        printoption "stupid    " "test for stupid code"        printoption "gnu       " "test for GNUisms"        printoption "res       " "test for reserved identifiers"        echo        printoption "all       " "enable all tests" "no"        echo  "                   (-noall can be specified as -none)"        echo        printoption "showcont  " "show offending content of file(s)"        echo        printoption "color     " "colored output"        printoption "head      " "print heading for each test"        printoption "svn       " \                    "use svn info to determine which files to check"        echo -e "\nIf no files are specified, the whole tree is traversed."        echo -e "If there are, -(no)svn has no effect.\n"        exit        ;;    -all)        set_all_tests yes        ;;    -noall)        set_all_tests no        ;;    -none)        set_all_tests no        ;;    -*)        var=`echo X$i | sed 's/^X-//'`        val=yes        case "$var" in            no*)                var=`echo "$var" | cut -c 3-`                val=no                ;;        esac        case "$allflags" in            *\ $var\ *)                eval _$var=$val                ;;            *)                echo "unknown option: $i" >&2                exit 0                ;;        esac        ;;    *)        _files="$_files $i"        ;;    esacdone# -----------------------------------------------------------------------------# Set heading colorif [ "$_color" = "yes" ]; then    COLB="\e[36m"    COLE="\e[m"else    COLB=""    COLE=""fi# Generate filelist once so -svn isn't _that_ much slower than -nosvn anymorefilelist=`all_filenames`if [ "$_stupid" = "yes" -o "$_res" = "yes" ] ; then    # generate 'shortlist' to avoid false positives in xpm files, docs, etc,    # when one only needs to check .c and .h files    chfilelist=`echo $filelist | tr ' ' '\n' | grep "[\.][ch]$"`fiif [ "$_showcont" = "yes" ]; then  _diffopts="-u"  _grepopts="-n -I"else  _diffopts="-q"  _grepopts="-l -I"fiTAB=`echo " " | tr ' ' '\011'`# -----------------------------------------------------------------------------# DO CHECKS# -----------------------------------------------------------------------------if [ "$_spaces" = "yes" ]; then    printhead "checking for spaces in filenames ..."    find . | grep " "fi# -----------------------------------------------------------------------------if [ "$_extensions" = "yes" ]; then    printhead "checking for uppercase extensions ..."    echo $filelist | grep "\.[[:upper:]]\+$" | grep -v "\.S$"fi# -----------------------------------------------------------------------------if [ "$_crlf" = "yes" ]; then    printhead "checking for MSDOS line endings ..."    CR=`echo " " | tr ' ' '\015'`    grep $_grepopts "$CR" $filelistfi# -----------------------------------------------------------------------------if [ "$_tabs" = "yes" ]; then    printhead "checking for TAB characters ..."    grep $_grepopts "$TAB" $filelistfi# -----------------------------------------------------------------------------if [ "$_trailws" = "yes" ]; then    printhead "checking for trailing whitespace ..."    grep $_grepopts "[[:space:]]\+$" $filelistfi# -----------------------------------------------------------------------------if [ "$_rcsid" = "yes" ]; then    printhead "checking for missing RCS \$Id\$ or \$Revision\$ tags ..."    grep -L -I "\$\(Id\|Revision\)[[:print:]]\+\$" $filelistfi# -----------------------------------------------------------------------------if [ "$_oll" = "yes" ]; then    printhead "checking for overly long lines (over 79 characters) ..."    grep $_grepopts "^[[:print:]]\{80,\}$" $filelistfi# -----------------------------------------------------------------------------if [ "$_gnu" = "yes" ]; then    printhead "checking for GNUisms ..."    grep $_grepopts "case.*\.\.\..*:" $filelistfi# -----------------------------------------------------------------------------if [ "$_res" = "yes" -a -n "$chfilelist" ]; then    printhead "checking for reserved identifiers ..."    grep $_grepopts "#[ $TAB]*define[ $TAB]\+_[[:upper:]].*" $chfilelist    grep $_grepopts "#[ $TAB]*define[ $TAB]\+__.*" $chfilelistfi# -----------------------------------------------------------------------------if [ "$_charset" = "yes" ]; then    printhead "checking bad charsets ..."    for I in $filelist ; do      case "$I" in        ./help/help_mp-*.h)          ;;        ./DOCS/*)          ;;        *.c|*.h)          iconv -c -f ascii -t ascii "$I" | diff $_diffopts "$I" -          ;;      esac    donefi# -----------------------------------------------------------------------------if [ "$_stupid" = "yes" -a -n "$chfilelist" ]; then    printhead "checking for stupid code ..."    for i in calloc malloc realloc memalign av_malloc av_mallocz faad_malloc \             lzo_malloc safe_malloc mpeg2_malloc _ogg_malloc; do        printhead "--> casting of void* $i()"        grep $_grepopts "([ $TAB]*[a-zA-Z_]\+[ $TAB]*\*.*)[ $TAB]*$i" \                                                                    $chfilelist    done    for i in "" signed unsigned; do        printhead "--> usage of sizeof($i char)"        grep $_grepopts "sizeof[ $TAB]*([ $TAB]*$i[ $TAB]*char[ $TAB]*)" \                                                                    $chfilelist    done    for i in int8_t uint8_t; do        printhead "--> usage of sizeof($i)"        grep $_grepopts "sizeof[ $TAB]*([ $TAB]*$i[ $TAB]*)" $chfilelist    done    printhead "--> usage of &&1"    grep $_grepopts "&&[ $TAB]*1" $chfilelist    printhead "--> usage of ||0"    grep $_grepopts "||[ $TAB]*0" $chfilelist    # added a-fA-F_ to eliminate some false positives    printhead "--> usage of *0"    grep $_grepopts "[a-zA-Z0-9)]\+[ $TAB]*\*[ $TAB]*0[^.0-9xa-fA-F_]" \                                                                    $chfilelist    printhead "--> usage of *1"    grep $_grepopts "[a-zA-Z0-9)]\+[ $TAB]*\*[ $TAB]*1[^.0-9ea-fA-F_]" \                                                                    $chfilelist    printhead "--> usage of +0"    grep $_grepopts "[a-zA-Z0-9)]\+[ $TAB]*+[ $TAB]*0[^.0-9xa-fA-F_]" \                                                                    $chfilelist    printhead "--> usage of -0"    grep $_grepopts "[a-zA-Z0-9)]\+[ $TAB]*-[ $TAB]*0[^.0-9xa-fA-F_]" \                                                                    $chfilelistfi# -----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?