#!/usr/bin/env sh
#
# trashman handles junky software installation procedures
#
# Copyright (C) 2017 Silvio Rhatto - rhatto at riseup.net
#
# 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 3 of the License,
# or 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, see .
# Parameters
NAME="trashman"
PROGRAM="$0"
BASENAME="`basename $0`"
ACTION="$1"
CWD="`pwd`"
# Set shared files location
if [ -e "`dirname $(readlink -f $0)`/share/$NAME" ]; then
# Development or local installation layout
APP_BASE="`dirname $(readlink -f $0)`"
LIB="$APP_BASE/share/$NAME"
SHARE="$APP_BASE/share/$BASENAME"
else
# System installation layout
APP_BASE="`dirname $(readlink -f $0)`"
LIB="$APP_BASE/../share/$NAME"
SHARE="$APP_BASE/../share/$BASENAME"
fi
# Include basic functions
. $LIB/trashman/functions || exit 1
# Display usage
trashman_usage() {
echo "$BASENAME: package ports tree and heterodox configuration provisioner"
echo ""
echo "usage: $BASENAME "
if [ "$BASENAME" = "trashman" ]; then
echo "usage: $BASENAME "
fi
echo "usage: $BASENAME [ ... ] [<--param1=value1> ... <--paramM=valueM>]"
echo ""
echo "available packages:"
echo ""
for package in `trashman_implementations`; do
if [ -e "$SHARE/$package/info" ]; then
echo "\t $package: `cat $SHARE/$package/info` (`trashman_actions $package | sed -e 's/ /|/g'`)"
fi
done
echo ""
exit 1
}
# Dispatch
if [ -z "$ACTION" ]; then
trashman_usage
elif [ "$ACTION" = "fetch" ]; then
trashman_$ACTION
elif [ "$ACTION" = "merge" ]; then
trashman_$ACTION
elif [ "$ACTION" = "deploy" ]; then
trashman_$ACTION $*
elif [ "$ACTION" = "version" ]; then
trashman_$ACTION
else
# Get packages param
shift
PACKAGES="$*"
# Setup packages
if [ -z "$PACKAGES" ]; then
trashman_usage
else
for package in $PACKAGES; do
if [ ! -z "`trashman_actions $package`" ]; then
folder="`trashman_actions_folder $package`"
# Checking for privileges
if [ "$BASENAME" = "trashman" ]; then
trashman_check_root $ACTION $package
else
trashman_check_sudo
fi
if [ -x "$SHARE/$package/$folder/$ACTION" ]; then
if [ "$ACTION" != "check" ] && [ "$ACTION" != "test" ]; then
trashman_echo "Issuing action $ACTION for $package ($folder)..."
fi
# Run action for package
$SHARE/$package/$folder/$ACTION $SHARE $LIB
trashman_check_exit_status $ACTION $?
else
trashman_echo "No such action $ACTION for package $package, skipping"
fi
else
trashman_echo "No such package $package, skipping"
fi
done
# Exit with the latest return status
exit $status
fi
fi