#!/bin/sh

set -e
CVS_VERSION='$Id: upgrade-rpm.sh,v 1.7 2001/09/07 18:06:14 sbi Exp $'
RPM_VERSION=`/usr/local/bin/rpm --version | sed 's/^.* //'`
RPMDB_BACKUP="/usr/local/lib/rpm/rpm3-database.tar.gz"
PKGLIST_BACKUP="/usr/local/lib/rpm/rpm3-pkglist"
CWD=`pwd`
LD_LIBRARY_PATH="$CWD/melty-perl/lib/perl5/5.00502/sun4-solaris-thread/CORE"
export LD_LIBRARY_PATH
PERL_BIN="$CWD/melty-perl/bin/perl -I$CWD/melty-perl/lib/perl5/5.00502/ -I$CWD/melty-perl/lib/perl5/site_perl/5.005/ -I$CWD/melty-perl/lib/perl5/site_perl/5.005/sun4-solaris-thread"
RPM_BIN="/usr/local/bin/rpm"
if [ $# = 1 ]; then
    REPOSITORY=$1
else
    REPOSITORY=`$PERL_BIN $CWD/repository-data.pl`
fi
LOCAL_RPMS=`$PERL_BIN $CWD/repository-data.pl $REPOSITORY LOCAL_RPMS`
EXTENSION=`$PERL_BIN $CWD/repository-data.pl $REPOSITORY EXTENSION`
RPM3_PKG="rpm-3.0.6-3"
RPM4_PKG="rpm-4.0.2-3"
DB_PKG="db-3.1.17-5"

echo "upgrade-rpm.sh: $CVS_VERSION"

case $RPM_VERSION in
    3.0*) ;;
    *)
	echo "You don't appear to have RPM 3 installed."
	exit 1
	;;
esac

if [ -r $RPMDB_BACKUP ]; then
    echo "$RPMDB_BACKUP already exists."
    exit 1
fi

echo "Backing up RPM database to $RPMDB_BACKUP ..."
tar cvf - /var/local/lib/rpm | gzip > $RPMDB_BACKUP
echo "Saving list of installed packages to $PKGLIST_BACKUP ..."
$RPM_BIN -qa | sort > $PKGLIST_BACKUP

if [ $RPM_VERSION != "3.0.6" ]; then
    echo "Downloading RPM 3 ..."
    $PERL_BIN grab_rpm.pl $RPM3_PKG
    echo "Upgrading RPM to version 3.0.6 ..."
    $RPM_BIN -Uvh $LOCAL_RPMS/$RPM3_PKG$EXTENSION
    echo "Running rpm --rebuilddb ..."
    $RPM_BIN --rebuilddb -vv
fi

case `rpm -q db` in
    *3.1.14*)
	echo "Downloading db-3.1.17 ..."
	$PERL_BIN grab_rpm.pl $DB_PKG
	echo "Upgrading db to version 3.1.17 ..."
	$RPM_BIN -Uvh $LOCAL_RPMS/$DB_PKG$EXTENSION
	;;
    *) ;;
esac

echo "Downloading RPM 4 ..."
$PERL_BIN grab_rpm.pl $RPM4_PKG
echo "Upgrading RPM to version 4.0.2 ..."
$RPM_BIN -Uvh $LOCAL_RPMS/$RPM4_PKG$EXTENSION
echo "Running rpm --rebuilddb ..."
$RPM_BIN --rebuilddb -vv --dbapi 1 --rebuilddbapi 3

echo "Testing database (output mentioning only rpm is normal) ..."
$RPM_BIN -qa | sort | diff $PKGLIST_BACKUP -

echo "Done."
