#!/bin/bash # # updatesync # # Copyright (c) 2004 by Jason Chu <jason@archlinux.org> # Derived from gensync (c) 2002-2006 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. # myver='3.0.0' usage() { echo "updatesync $myver" echo "usage: $0 <action> <destfile> <option> [package_directory]" echo echo "updatesync will update a sync database by reading a PKGBUILD and" echo "modifying the destfile. updatesync updates the database in a temporary" echo "directory and then compresses it to <destfile>." echo echo "There are two types of actions:" echo echo "upd - Will update a package's entry or create it if it doesn't exist." echo " It takes the package's PKGBUILD as an option." echo "del - Will remove a package's entry from the db." echo " It takes the package's name as an option." echo echo "updatesync will calculate md5sums of packages in the same directory as" echo "<destfile>, unless an alternate [package_directory] is specified." echo echo "example: updatesync upd /home/mypkgs/custom.db.tar.gz PKGBUILD" echo echo exit 0 } BUILDSCRIPT="PKGBUILD" PKGEXT="pkg.tar.gz" source /etc/makepkg.conf error () { echo "==> ERROR: $*" >&2 } die () { error $* exit 1 } check_force () { local i for i in ${options[@]}; do local lc=$(echo $i | tr [:upper:] [:lower:]) if [ "$lc" = "force" ]; then true fi done false } if [ $# -lt 3 ]; then usage exit 1 fi if [ "$1" = "-h" -o "$1" = "--help" ]; then usage exit 0 fi if [ "$1" != "upd" -a "$1" != "del" ]; then usage exit 1 fi action=$1 pkgdb=$2 option=$3 pkgdir="$(pwd)" if [ "$4" != "" ]; then pkgdir="$4" fi opt_force="" if [ ! -f "$option" ]; then die "$option not found" fi if [ "$action" = "upd" ]; then # INSERT / UPDATE unset pkgname pkgver pkgrel options source $option || die "failed to parse $option" pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-$CARCH.$PKGEXT" if [ ! -f "$pkgfile" ]; then die "could not find $pkgname-$pkgver-$pkgrel-$CARCH.$PKGEXT - aborting" fi if check_force; then opt_force="--force" fi repo-add "$pkgdb" $opt_force "$pkgfile" else # DELETE fname="$(basename $option)" if [ "$fname" = "PKGBUILD" ]; then unset pkgname pkgver pkgrel options source $option else pkgname=$1 fi repo-remove "$pkgdb" "$pkgname" fi exit 0 # vim: set ts=2 sw=2 noet: