#!/bin/sh # # Prune the failure files of stale entries # # This must be called via: # # lockf -k ${pb}/${arch}/${branch}/failure.lock ${pb}/scripts/prunefailure ${arch} ${branch} ${buildid} # # to avoid racing with any package builds in progress that might try to append to # these files. # configurable variables pb=/var/portbuild cleanup() { echo "Problem writing new failure file!" rm -f failure.new exit 1 } if [ $# -ne 3 ]; then echo "prunefailure " exit 1 fi arch=$1 branch=$2 buildid=$3 shift 3 . ${pb}/${arch}/portbuild.conf . ${pb}/scripts/buildenv builddir=${pb}/${arch}/${branch}/builds/${buildid} buildenv ${pb} ${arch} ${branch} ${builddir} home=${pb}/${arch}/${branch} cd $home pkgdir=${builddir}/packages/All index=${PORTSDIR}/${INDEXFILE} if [ "`wc -l $index | awk '{print $1}'`" -lt 9000 ]; then echo "INDEX is corrupted, terminating!" exit 1 fi echo "===> Pruning old failure file" rm -f failure.new IFS='|' while read dir name ver olddate date count; do if [ -z "$dir" -o -z "$name" -o -z "$ver" -o -z "$olddate" -o -z "$date" -o -z "$count" ]; then echo Malformed entry "$dir|$name|$ver|$olddate|$date|$count" # Clean up the 'latest error log' symlink rm -f ${pb}/${arch}/${branch}/latest/${dir} continue fi entry=$(grep "|/usr/ports/$dir|" $index) if [ -z "$entry" ]; then echo $dir not in index rm -f ${pb}/${arch}/${branch}/latest/${dir} continue fi newver=$(echo $entry | awk '{print $1}') if [ -e "${builddir}/packages/All/$newver${PKGSUFFIX}" ]; then echo "$newver package exists, should not still be here!" rm -f ${pb}/${arch}/${branch}/latest/${dir} continue fi if grep -qxF $newver ${builddir}/duds.full; then echo "$newver listed in duds, should not be here" rm -f ${pb}/${arch}/${branch}/latest/${dir} continue fi (echo "$dir|$name|$newver|$olddate|$date|$count" >> $home/failure.new) || cleanup done < $home/failure mv failure.new failure