diff options
-rwxr-xr-x | sbopkglint | 95 |
1 files changed, 71 insertions, 24 deletions
@@ -38,7 +38,7 @@ requirement that these have to be SBo packages, but a couple of the tests (e.g. the check for $PRGNAM.SlackBuild in the doc dir) might not apply to non-SBo builds. -Diagnostics will be logged to stdout and stderr. Exit status will +Diagnostics will be logged to B<stdout> and B<stderr>. Exit status will be 0 if all tests passed, non-zero otherwise. This script must run as root. If you run it as a normal user, it tries @@ -66,6 +66,15 @@ without this option, however. Disable the check for /usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild. For use with non-SBo packages (including core Slackware packages). +=item B<-c>, B<--color> + +Colorize the output (green I<OK>, red I<FAILED>, etc). Default is to use +color only when B<stdout> is a terminal. + +=item B<-m>, B<--mono> + +Do not colorize the output, even if B<stdout> is a terminal. + =item B<--help> Show the short built-in help. @@ -77,11 +86,11 @@ pager (e.g. less(1) or more(1)) to display it. =item B<--man> -Convert this documentation to a man page, on stdout. +Convert this documentation to a man page, on B<stdout>. =item B<--version> -Print the B<sbopkglint> version number on stdout and exit. +Print the B<sbopkglint> version number on B<stdout> and exit. =back @@ -105,6 +114,15 @@ useful comments that go into more detail than the documentation here. =head1 TESTS +=head2 pre-doinst + +This test is done before B<doinst.sh> is run, unlike the rest of +the tests. It checks for the existence of various files that should +not be in the package, but are OK if generated by B<doinst.sh>, +e.g. I</usr/info/dir>. It also checks for the existence of symlinks +in the package (these also must be created by B<doinst.sh>, not +included in the package archive). + =head2 basic-sanity =over 4 @@ -367,17 +385,19 @@ usage() { $SELF v$VER - check SBo binary packages for various problems Usage: - $0 [-k] [-i] [-s] [/path/to/package-file] [...] - $0 --doc | --man + $0 [-k] [-i] [-s] [-c | -m] [/path/to/package-file] [...] + $0 --doc | --man | --version Options: --k Keep (don't delete) the package install directory at exit. --i Do not check for INSTALL in the doc dir. --s Do not check for \$PRGNAM.SlackBuild in doc dir. ---help Show short help message (you're looking at it now). ---doc See the full documentation in your pager. ---man Convert the full documentation to a man page, on stdout. ---version Print the sbopkglint version number on stdout and exit. +-k Keep (don't delete) the package install directory at exit. +-i Do not check for INSTALL in the doc dir. +-s Do not check for \$PRGNAM.SlackBuild in doc dir. +-c, --color Use color, even if stdout is not a tty. +-m, --mono Do not use color, even if stdout is a tty. +--help Show short help message (you're looking at it now). +--doc See the full documentation in your pager. +--man Convert the full documentation to a man page, on stdout. +--version Print the sbopkglint version number on stdout and exit. With no package arguments, it looks for a SlackBuild in the current directory, extracts the PRINT_PACKAGE_NAME information, and tries to @@ -395,6 +415,8 @@ you dislike sudo, you can always run it as root. EOF } +COLOR=${COLOR:-auto} + while true; do case "$1" in --version) echo $VER ; exit 0 ;; @@ -404,6 +426,8 @@ while true; do -i) INSTALL_DOCS_OK=1 ; shift;; -s) SLACKBUILD_MISSING_OK=1 ; shift;; -h*|--h*) usage; exit 0 ;; + -c|--color) COLOR=yes ; shift ;; + -m|--mono*) COLOR=no ; shift ;; -*) echo "$SELF: invalid option '$1', try '$SELF --help'" ; exit 1 ;; *) break ;; esac @@ -432,9 +456,32 @@ if [ "$(id -u)" != "0" ]; then KEEP="$KEEP" \ SBOPKGLINT_PATH="$SBOPKGLINT_PATH" \ SLACKBUILD_MISSING_OK="$SLACKBUILD_MISSING_OK" \ + COLOR="$COLOR" \ "$0" "$@" fi +if [ "$COLOR" = "auto" ]; then + if [ -t 1 ]; then + COLOR=yes + else + COLOR=no + fi +fi + +if [ "$COLOR" = "yes" ]; then + RED="\033[1;31m" + GREEN="\033[1;32m" + COLOR_OFF="\033[0m" +fi + +echo_OK() { + echo -e "${GREEN}OK${COLOR_OFF}" +} + +echo_FAILED() { + echo -e "${RED}FAILED${COLOR_OFF}" +} + warn() { [ "$warncount" = "0" ] && echo : $(( warncount ++ )) @@ -515,21 +562,21 @@ for package in $packages; do explodepkg "$PKG" &> $PKG/.tmp.$$ S="$?" if [ "$S" != "0" ]; then - echo "FAILED" + echo_FAILED echo "explodepkg exited with status $S" rm -rf $PKG exit_status=1 continue fi - echo "OK" + echo_OK echo -n "Running pre-doinst test..." warncount=0 source $testdir/pre-doinst.sh if [ "$warncount" = "0" ]; then - echo "OK" + echo_OK else - echo "FAILED" + echo_FAILED : $(( totalwarns += warncount )) fi cd "$olddir" @@ -542,7 +589,7 @@ for package in $packages; do S="$?" if [ "$S" != "0" ]; then - echo "FAILED" + echo_FAILED cat $PKG/.tmp.$$ echo "installpkg exited with status $S" [ "$KEEP" = "" ] && rm -rf $PKG @@ -550,7 +597,7 @@ for package in $packages; do continue fi - echo "OK" + echo_OK rm -f $PKG/.tmp.$$ olddir="$( pwd )" @@ -563,9 +610,9 @@ for package in $packages; do echo -n "Running test: $( basename $testscript .t.sh )..." source "$testscript" if [ "$warncount" = "0" ]; then - echo "OK" + echo_OK else - echo "FAILED" + echo_FAILED echo "$warncount" > .tmp.warncount fi ) @@ -585,11 +632,11 @@ for package in $packages; do fi if [ "$totalwarns" = "0" ]; then - echo "=== $filename: All tests passed" + echo -e "=== $filename: ${GREEN}All tests passed${COLOR_OFF}" : $(( passcount ++ )) else exit_status=1 - echo "!!! $filename: $totalwarns failures" + echo -e "!!! $filename: ${RED}$totalwarns failures${COLOR_OFF}" : $(( failcount ++ )) faillist+="$filename " fi @@ -600,9 +647,9 @@ if [ "$want_summary" = "1" ]; then count=$(( failcount + passcount )) echo "=== $count packages linted, $passcount passed, $failcount failed" if [ "$failcount" = "0" ]; then - echo "=== All packages check out OK" + echo -e "=== ${GREEN}All packages check out OK${COLOR_OFF}" else - echo "!!! Failed packages:" + echo -e "!!! ${RED}Failed packages:${COLOR_OFF}" for i in $faillist; do echo $i done |