[pacman-dev] [ABS PATCH] Allow syncing the ABS tree using tarballs
Dieter Plaetinck
dieter at plaetinck.be
Sun Oct 26 11:14:15 EDT 2008
+ if [ ! "$(type -p rsync)" ]; then
+ error "missing wget download utility. Install wget."
+ exit $_E_MISSING_PROGRAM
+ fi
You probably meant 'type -p wget' here?
You can also just check the exit status of type btw, instead of
capturing and comparing its output:.
if ! type -p wget >/dev/null; then ....
Dieter
Allan McRae wrote:
> I figured I'd post this here for comments seem it is a fairly decent
> sized patch.
> Thanks,
> Allan
>
>
> Some people are stuck behind restrictive firewalls and can not sync
> the ABS tree using rsync. This patch adds support for downloading
> ABS snapshot tarballs from pacman mirrors.
>
> Signed-off-by: Allan McRae <allan at archlinux.org>
> ---
> abs | 56
> ++++++++++++++++++++++++++++++++++++++++++++++++++++----
> conf/abs.conf | 7 ++++++-
> 2 files changed, 58 insertions(+), 5 deletions(-)
>
> diff --git a/abs b/abs
> index bd1191d..a369482 100755
> --- a/abs
> +++ b/abs
> @@ -80,6 +80,7 @@ usage() {
> echo "Options:"
> echo " -h, --help Display this help message then exit."
> echo " -V, --version Display version information then exit."
> + echo " -t, --tarball Sync ABS tree using tarballs from your
> pacman mirror."
> echo
> echo "abs will synchronize PKGBUILD scripts from the Arch Linux
> repositories"
> echo "into $ABSROOT via rsync. If no argument is given, abs will
> synchronize"
> @@ -97,7 +98,7 @@ version() {
> echo "There is NO WARRANTY, to the extent permitted by law."
> }
>
> -update() {
> +update_rsync() {
> cd "$ABSROOT"
>
> if [ "$CLPARAM" = "" ]; then
> @@ -138,6 +139,48 @@ update() {
> $SYNCCMD $SYNCARGS $INCLUDE $EXCLUDE ${SYNCSERVER}::abs/${ARCH}/
> $ABSROOT
> }
>
> +update_tarball() {
> + cd "$ABSROOT"
> +
> + if [ ! "$(type -p rsync)" ]; then
> + error "missing wget download utility. Install wget."
> + exit $_E_MISSING_PROGRAM
> + fi
> +
> + if [ -f "$MIRRORLIST" ]; then
> + mirrorlist=$(grep "^Server" $MIRRORLIST | cut -f3 -d" ")
> + else
> + error "Could not find pacman mirrorlist file $MIRRORLIST"
> + exit $_E_CONFIG_ERROR
> + fi
> +
> + msg "Downloading tarballs..."
> + for repo in "${REPOS[@]}"; do
> + if [ "$repo" == "${repo#!}" ]; then
> + echo " ==> ${repo}..."
> +
> + ret=0
> + for mirror in ${mirrorlist[@]}; do
> + tarball=$(echo $mirror | sed "s#\$repo#$repo#")
> + tarball="${tarball}/${repo}.abs.tar.gz"
> + wget -q $tarball || ret=$?
> + if [ $ret -eq 0 ]; then
> + break
> + fi
> + done
> +
> + if [ $ret -ne 0 ]; then
> + echo " Download failed"
> + continue
> + fi
> +
> + rm -rf $repo
> + tar -xzf ${repo}.abs.tar.gz
> + rm ${repo}.abs.tar.gz
> + fi
> + done
> +}
> +
> ##
> # Signal Traps
> ##
> @@ -148,8 +191,8 @@ trap 'error "An unknown error has occured.
> Exiting..."; exit 1' ERR
> ##
> # Parse Options
> ##
> -OPT_SHORT="hV"
> -OPT_LONG="help,version"
> +OPT_SHORT="hVt"
> +OPT_LONG="help,version,tarball"
> 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'
> @@ -162,6 +205,7 @@ while true; do
> case "$1" in
> -h|--help) usage; exit $_E_OK;;
> -V|--version) version; exit $_E_OK;;
> + -t|--tarball) TARBALL=1;;
>
> --) OPT_IND=0; shift; break;;
> *) usage; exit $_E_INVALID_OPTION;;
> @@ -195,7 +239,11 @@ fi
> ##
> # Go-go Update ABS tree!
> ##
> -update
> +if [ "$TARBALL" ]; then
> + update_tarball
> +else
> + update_rsync
> +fi
>
> exit $_E_OK
>
> diff --git a/conf/abs.conf b/conf/abs.conf
> index 7d5fd79..6511a58 100644
> --- a/conf/abs.conf
> +++ b/conf/abs.conf
> @@ -1,5 +1,5 @@
> #
> -# /etc/abs/abs.conf
> +# /etc/abs.conf
> #
>
> # the top-level directory of all your PKGBUILDs
> @@ -17,6 +17,11 @@ SYNCSERVER="rsync.archlinux.org"
> ARCH="i686"
>
> #
> +# Pacman mirror list used for syncing via tarball
> +#
> +MIRRORLIST="/etc/pacman.d/mirrorlist"
> +
> +#
> # REPOS to be parsed by abs (in this order)
> # (prefix a repo with a ! to disable it)
> #
More information about the pacman-dev
mailing list