#!/bin/bash
set -e -o noclobber

#NEEDS: $REPO_PATH, $PWD as target dir to patch

die () { echo "$1" >&2; exit 1; }

>.scripts-security-upd-lock || die "error: Unable to obtain update lock."

echo "[$PWD] begin dry run"

if [ -e "$REPO_PATH/patches/${SCRIPT}-${OLDVERSION}-${NEWVERSION}-not_there" ]; then
    xargs -n1 test ! -e <"$REPO_PATH/patches/${SCRIPT}-${OLDVERSION}-${NEWVERSION}-not_there" || die "error: Conflicting files exist."
fi
if [ -e "$REPO_PATH/patches/${SCRIPT}-${OLDVERSION}-${NEWVERSION}-old.md5" ]; then
    md5sum -c "$REPO_PATH/patches/${SCRIPT}-${OLDVERSION}-${NEWVERSION}-old.md5" || die "error: MD5 check failed.  User has modified binary files!"
fi
patch -stN --dry-run --no-backup-if-mismatch -p2 <"$REPO_PATH/patches/$SCRIPT-$OLDVERSION-$NEWVERSION.patch"

echo "[$PWD] dry run OK, applying update"
echo "Running relevant pre- scripts..."

[ -x "$REPO_PATH/scripts/$SCRIPT-$NEWVERSION.pre" ] && REPO_PATH="$REPO_PATH" URL="$URL" "$REPO_PATH/scripts/$SCRIPT-$NEWVERSION.pre"
[ -x "$REPO_PATH/scripts/$SCRIPT-$OLDVERSION-$NEWVERSION.pre" ] && REPO_PATH="$REPO_PATH" URL="$URL" "$REPO_PATH/scripts/$SCRIPT-$OLDVERSION-$NEWVERSION.pre"

for i in `ls "$REPO_PATH/scripts/$SCRIPT-all"/*.pre`; do
    echo $i
    [ -x "$i" ] && REPO_PATH="$REPO_PATH" URL="$URL" "$i"
done


echo "Applying actual update..."


mv .scripts-version .scripts-version.old
patch -stN --no-backup-if-mismatch -p2 <"$REPO_PATH/patches/$SCRIPT-$OLDVERSION-$NEWVERSION.patch"
[ -e "$REPO_PATH/patches/${SCRIPT}-${OLDVERSION}-${NEWVERSION}-del" ] && xargs rm -f <"$REPO_PATH/patches/${SCRIPT}-${OLDVERSION}-${NEWVERSION}-del"
cp -a "$REPO_PATH/patches/${SCRIPT}-${OLDVERSION}-${NEWVERSION}/." .
(cat .scripts-version.old; echo "+++ Upgraded to $NEWVERSION on `date`: $REPO_PATH/patches/$SCRIPT-$OLDVERSION-$NEWVERSION.patch") >>.scripts-version
rm -f .scripts-version.old

echo "Running relevant post- scripts..."

[ -x "$REPO_PATH/scripts/$SCRIPT-$NEWVERSION.post" ] && REPO_PATH="$REPO_PATH" URL="$URL" "$REPO_PATH/scripts/$SCRIPT-$NEWVERSION.post"
[ -x "$REPO_PATH/scripts/$SCRIPT-$OLDVERSION-$NEWVERSION.post" ] && REPO_PATH="$REPO_PATH" URL="$URL" "$REPO_PATH/scripts/$SCRIPT-$OLDVERSION-$NEWVERSION.post"


for i in `ls "$REPO_PATH/scripts/$SCRIPT-all/"*.post`; do
    echo $i
    [ -x "$i" ] && REPO_PATH="$REPO_PATH" URL="$URL" "$i"
done


rm -f .scripts-security-upd-lock

echo "[$PWD] done"

exit 0
