aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsbopkglint95
1 files changed, 71 insertions, 24 deletions
diff --git a/sbopkglint b/sbopkglint
index 7e1638e..daff986 100755
--- a/sbopkglint
+++ b/sbopkglint
@@ -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