#!/bin/sh

umask 002

srcdir=`pwd`
tmpdir=$srcdir/tmp/rulesdir.$$
rm -rf $tmpdir; 
mkdir -p $tmpdir         || exit $?


PERL=${PERL:-perl}

RELDIR=$HOME/public_html/devel
mkdir -p $RELDIR

DISTNAME=Mail-SpamAssassin-rules
make || perl Makefile.PL < /dev/null || exit $?
make || exit $?
make version.env || exit $?
. ./version.env

# "3.1.0-pre2-r202405" should appear as "3.1.0-pre2" after this
VERSION=`echo $FULL_VERSION | perl -pe 's/-(r\d+)$//'`

set -e

$PERL -T ./sa-update.raw --updatedir $tmpdir --debug > $tmpdir/o 2>&1 || true
SVNVER=`perl -ne '/parsed as (\d{5,})$/ and print $1' < $tmpdir/o`

if [ "$SVNVER" = "" ] ; then
    echo "cannot find 'parsed as' line in $tmpdir/o"
    exit 1
fi

DISTVNAME=$DISTNAME-$VERSION.r$SVNVER
DISTVBASE=$DISTNAME-$VERSION

MIRROR="https://ruleqa.spamassassin.org/updates"

echo $SVNVER

wget -O $tmpdir/rules.tgz        $MIRROR/$SVNVER.tar.gz
wget -O $tmpdir/rules.tgz.sha256 $MIRROR/$SVNVER.tar.gz.sha256
wget -O $tmpdir/rules.tgz.asc    $MIRROR/$SVNVER.tar.gz.asc

# ensure non-empty
[ -s $tmpdir/rules.tgz ] || exit 3

linttmp=$tmpdir/lintdir
rm -rf $linttmp
mkdir $linttmp
(
  cd $linttmp
  # check validity of tarball; also extract
  gunzip -cd < $tmpdir/rules.tgz | tar xf - || exit $?
)

sitetmp=$tmpdir/sitetmp
rm -rf $sitetmp
mkdir $sitetmp
cp rules/*.pre $sitetmp

# now, ensure the ruleset (entirely as distributed) lints, also.
# use "-p /dev/null" so any user_prefs data is ignored.
./spamassassin -x --configpath=$linttmp --siteconfigpath=$sitetmp \
               -p /dev/null --lint \
                || exit $?

awk '{print $1}' $tmpdir/rules.tgz.sha256 > $tmpdir/sha.orig

(
  cd $tmpdir
  ln rules.tgz $DISTVNAME.tgz
  # rebuild the SHA sums
  $PERL $srcdir/build/sha256sum.pl $DISTVNAME.tgz > rules.tgz.sha256  || exit $?
  $PERL $srcdir/build/sha512sum.pl $DISTVNAME.tgz > rules.tgz.sha512  || exit $?
)

awk '{print $1}' $tmpdir/rules.tgz.sha256 > $tmpdir/sha.new
cmp $tmpdir/sha.orig $tmpdir/sha.new                              || exit $?

for ext in tgz tgz.sha256 tgz.sha512 tgz.asc ; do
  rm -f $RELDIR/$DISTVBASE.*.$ext
  if [ -f $tmpdir/rules.$ext ] ; then
    mv $tmpdir/rules.$ext $RELDIR/$DISTVNAME.$ext
    ls -l $RELDIR/$DISTVNAME.$ext
  fi
done

#chgrp -R spamassassin $RELDIR || true
rm -rf $tmpdir

