#!/bin/sh
# $Id: update-rpm-database.sh,v 1.2 2001/12/18 21:29:00 sbi Exp $

set -e

LOGFILE="/var/log/update-rpmdb-log"
RPM_BIN="/usr/local/bin/rpm"
RPM_PKGS_DIR="/usr/local/src/rpm-packages"
VPKG_SPEC_DIR="$RPM_PKGS_DIR/VPKG-SPECS"
SOLARIS_CONTENTS="/var/sadm/install/contents"
REPOSITORY=`perl repository-data.pl`
RPM_RPM_DIR=`perl repository-data.pl $REPOSITORY LOCAL_RPMS`
RPMBUILD_BIN=`perl repository-data.pl $REPOSITORY RPMBUILD`

log_echo () {
    echo $*
    echo $* >> $LOGFILE
}

DATE=`date '+%m%d%y'`
REMOVE_MANIFEST="$VPKG_SPEC_DIR/remove.$DATE"
INSTALL_MANIFEST="$VPKG_SPEC_DIR/install.$DATE"
BUILD_MANIFEST="$VPKG_SPEC_DIR/build.$DATE"
SC_OUTPUT="$VPKG_SPEC_DIR/sc.$DATE"

# Sanity check

touch $LOGFILE
if [ ! -w $LOGFILE ] ; then
    echo "Cannot write to log $LOGFILE."
    exit 1
fi

# Install exit handler

atexit () {
    # Clean up messy temp directories, files
    set +e
    rm -f $BUILD_MANIFEST $INSTALL_MANIFEST $REMOVE_MANIFEST $SC_OUTPUT
}
trap atexit INT TERM 0

# Use solaris-contents.pl to update the RPM db

log_echo "Writing new spec files ..."
perl solaris-contents.pl -vu 2>>$LOGFILE | tee $SC_OUTPUT

# Update RPM db.

for i in `grep "^REMOVE:" $SC_OUTPUT | sed 's/^REMOVE://'` ; do
    log_echo "Removing $i"
    rpm -e --nodeps $i
done

log_echo "Building new spec files ..."
for i in `grep "^BUILD:" $SC_OUTPUT | sed 's/BUILD://'` ; do
    log_echo "Building $i"
    rpm -bb $VPKG_SPEC_DIR/$i
done

log_echo "Installing new RPMs ..."
for i in `grep "^INSTALL:" $SC_OUTPUT | sed 's/INSTALL://'` ; do
    log_echo "Installing $i"
    $RPM_BIN -i --force --nodeps $RPM_RPM_DIR/$i*
done

log_echo "Done."
