#!/bin/bash
set -e

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

path="$1"
url=$(echo "$path" | perl -pe '/^\/mit\/([^\/]*)\/web_scripts\/(.*)$/; $_ = "http://scripts.mit.edu/~$1/$2\n";')
[ "$url" != "http://scripts.mit.edu/~/" ] || die "Usage: scripts-patch /mit/<user>/web_scripts/<path>"

versionfile=$path/.scripts-version
[ -f "$versionfile" ] || die "$path was not created by the scripts installer."
[ -r "$versionfile" ] || die "[$path] Could not read .scripts-version file."

# The format of the .scripts-version file is such an awful mess.
#
# I feel like that needed to be said.

version=$(tail -n +2 "$versionfile" | head -n1 | perl -pe '/File: .* -> \`(.*)\.tar\.(gz|bz2)'\''$/; $_ = $1')

updatespath=/mit/andersk/Public/scripts/updates
[ -d "$updatespath" ] || die "Could not find updates repository."
[ -d "$updatespath/$version" ] || die "[$path] No update available for $version."
echo "[$path] Applying update for $version:"

pagebefore=`mktemp -t scripts-patch.XXXXXXXXXX`
pageafter=`mktemp -t scripts-patch.XXXXXXXXXX`

url=$(echo "$path" | perl -pe '/^\/mit\/([^\/]*)\/web_scripts\/(.*)$/; $_ = "http://scripts.mit.edu/~$1/$2\n";')
wget -q "$url/" -O "$pagebefore"

(cd "$path"; "$updatespath/$version/update") || die "[$path] *** FAILED UPDATE *** of $version"

wget -q "$url/" -O "$pageafter"
echo "[$path] Diff from before/after upgrade:"
diff -U0 "$pagebefore" "$pageafter" || :

rm -f "$pagebefore" "$pageafter"
