summaryrefslogtreecommitdiffstats
path: root/scripts/abs.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/abs.sh.in')
-rw-r--r--scripts/abs.sh.in173
1 files changed, 173 insertions, 0 deletions
diff --git a/scripts/abs.sh.in b/scripts/abs.sh.in
new file mode 100644
index 00000000..ae825259
--- /dev/null
+++ b/scripts/abs.sh.in
@@ -0,0 +1,173 @@
+#!/bin/bash -e
+#
+# abs - download a PKGBUILD tree from a CVS repository
+# @configure_input@
+#
+# Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+
+##
+# Script Exit Reasons
+# -------------------
+# E_OK : Everything worked :)
+# E_MISSING_PROGRAM : A program the script depends on is not installed.
+# E_CONFIG_ERROR : Missing/incorrect configuration.
+# E_INVALID_OPTION : User has passed unknown/invalid option to script.
+##
+
+# gettext initialization
+export TEXTDOMAIN='pacman'
+export TEXTDOMAINDIR='@localedir@'
+
+myver='@PACKAGE_VERSION@'
+BUG_REPORT_EMAIL='@PACKAGE_BUGREPORT@'
+CONFDIR="@sysconfdir@/abs"
+PASSIVE='m'
+
+# Source config files
+if [ -r "$CONFDIR/abs.conf" ]; then
+ source "$CONFDIR/abs.conf"
+fi
+
+# User based overrides
+if [ -r ~/.abs.conf ]; then
+ source ~/.abs.conf
+fi
+
+
+msg() {
+ local mesg=$1; shift
+ printf "==> ${mesg}\n" "$@" >&2
+}
+
+error() {
+ local mesg=$1; shift
+ printf "==> $(gettext "ERROR:") ${mesg}\n" "$@" >&2
+}
+
+
+usage() {
+ printf "$(gettext "abs (pacman) %s - download a PKGBUILD tree from a CVS repository")\n\n" "$myver"
+ printf "$(gettext "Usage %s [options] [repository...]")\n\n" "$0"
+ printf "$(gettext "Options:")\n"
+ printf "$(gettext " -p, --passive The connection is opened in passive mode.")\n"
+ echo
+ printf "$(gettext " -h, --help Display this help message then exit.")\n"
+ printf "$(gettext " -V, --version Display version information then exit.")\n"
+ echo
+ printf "$(gettext "\
+abs will synchronize build scripts from the CVS repository\n\
+into %s. You can follow different package trees by\n\
+editing %s files. If no argument is given, abs\n\
+will synchronize from supfiles specified in %s.\n\n")" \
+ "$ABSROOT" "$CONFDIR/supfile.*" "$CONFDIR/abs.conf"
+ printf "$(gettext "Report bugs to <%s>.")\n" "$BUG_REPORT_EMAIL"
+}
+
+version() {
+ printf "abs (pacman) %s\n" "$myver"
+ printf "$(gettext "\
+Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org>.\n\n\
+This is free software; see the source for copying conditions.\n\
+There is NO WARRANTY, to the extent permitted by law.\n")"
+}
+
+
+##
+# Signal Traps
+##
+trap 'error "$(gettext "TERM signal caught. Exiting...")"; exit 1' TERM HUP QUIT
+trap 'error "$(gettext "Aborted by user! Exiting...")"; exit 1' INT
+trap 'error "$(gettext "An unknown error has occured. Exiting...")"; exit 1' ERR
+
+
+# Parse Command Line Options.
+OPT_SHORT="hpV"
+OPT_LONG="help,passive,version"
+OPT_TEMP="$(getopt -o "$OPT_SHORT" -l "$OPT_LONG" -n "$(basename "$0")" -- "$@" || echo 'GETOPT GO BANG!')"
+if echo "$OPT_TEMP" | grep -q 'GETOPT GO BANG!'; then
+ # This is a small hack to stop the script bailing with 'set -e'
+ echo; usage; exit 1 # E_INVALID_OPTION;
+fi
+eval set -- "$OPT_TEMP"
+unset OPT_SHORT OPT_LONG OPT_TEMP
+
+while true; do
+ case "$1" in
+ -p|--passive) PASSIVE='-';;
+
+ -h|--help) usage; exit 0;; # E_OK
+ -V|--version) version; exit 0;; # E_OK
+
+ --) OPT_IND=0; shift; break;;
+ *) usage; exit 1;; # E_INVALID_OPTION
+ esac
+ shift
+done
+
+if [ $# -gt 0 ]; then
+ SUPFILES=("$@")
+fi
+
+
+# Check permissions and programs.
+if [ ! -d "$ABSROOT" ]; then
+ error "$(gettext "%s does not exist or is not a directory.")" "$ABSROOT"
+ exit 1 # E_CONFIG_ERROR
+elif [ ! -w "$ABSROOT" ]; then
+ error "$(gettext "You do not have write permissions in %s.")" "$ABSROOT"
+ exit 1 # E_CONFIG_ERROR
+fi
+
+
+if [ "$(type -p csup)" ]; then
+ CVSUP="csup"
+elif [ "$(type -p cvsup)" ]; then
+ CVSUP="cvsup"
+else
+ error "$(gettext "Missing CVS synchronization utility. Install csup or cvsup.")"
+ exit 1 # E_MISSING_PROGRAM
+fi
+
+
+# Begin script.
+for sup in ${SUPFILES[@]}; do
+ case "$sup" in
+ testing)
+ if [ ! -d "$ABSROOT/$sup" ]; then
+ mkdir "$ABSROOT/$sup"
+ fi
+ workdir="$ABSROOT/$sup"
+ ;;
+
+ *)
+ if [ "$sup" != "${sup#!}" ]; then
+ continue
+ fi
+ workdir="$ABSROOT"
+ ;;
+ esac
+
+ msg "$(gettext "Updating %s...")" "$sup"
+ cd "$workdir"
+ $CVSUP -L 1 -r 0 -g -b "$workdir" -P "$PASSIVE" -c .sup "$CONFDIR/supfile.$sup"
+done
+
+exit 0 # E_OK
+
+# vim: set ts=2 sw=2 noet: