#!/usr/bin/env bash

set -eux
set -o pipefail > /dev/null 2>&1 || true

if ! [ -e to-be-saved/im-a-fifo ]
then
	# You can't check fifo's into subversion, so we create one here, and remove it later
	fifo_name=to-be-saved/im-a-fifo
	if type mkfifo > /dev/null
	then
		mkfifo "$fifo_name"
	else
		mknod "$fifo_name" p
	fi
fi

rm -rf save-dir-*

function files
{
	find $(pwd)/to-be-saved -name .svn -prune -o -print0
	case "$(uname -s)" in
		Haiku)
			# We don't try to do device files on Haiku, because its system python has no
			# os.major or os.minor
			;;
		*)
			find \
				$([ -e /dev/loop1 ] && echo /dev/loop1) \
				$([ -e /dev/urandom ] && echo /dev/urandom) \
				$([ -e /dev/zero ] && echo /dev/zero) \
				$([ -e /dev/null ] && echo /dev/null) \
				-name .svn -prune \
				-o -print0
			;;
	esac
}

hn=$(set -eu; hostname)

if type gtar > /dev/null 2>&1
then
	tar=gtar
else
	tar=tar
fi

files | \
	$tar --null --no-recursion --files-from - --create --file - | \
	$tar tvf - 2>&1 | \
	sed 's/  */ /g' | \
	../canonicalize-dates | \
	sort -k 6 > tar.tvf

for record in $(../../this-interpreter --variety all)
do
	pyver=$(echo "$record" | awk -F'%' ' { print $1 }')
	interp=$(echo "$record" | awk -F'%' ' { print $2 }')

	case "$pyver" in
		jython*|pypy-1.4|pypy-1.4.1|pypy-1.6)
			# Jython doesn't (yet?) have os.major and os.minor, so it will fail this test.
			# Neither do the older PyPy's, but PyPy 1.5 does
			# Oddly, PyPy 1.6 is missing st_rdev, so we skip this test there too.  1.5 continues to work fine.
			;;
		*)
			rm -rf save-dir-$pyver

			files | \
				"$interp" ../../backshift \
					--save-directory save-dir-$pyver \
					--backup \
					--hostname "$hn" \
					--subset test \
					--init-savedir

			backup_id=$(set -eu; "$interp" ../../backshift --save-directory save-dir-$pyver --list-backups | \
				tail -1 | \
				sed 's/ .*$//')

			"$interp" ../../backshift \
				--save-directory save-dir-$pyver \
				--produce-tar \
				--backup-id $backup_id | \
				$tar tvf - | \
				sed 's/  */ /g' | \
				../canonicalize-dates | \
				sort -k 6 > $pyver.tvf

			echo Diffing $pyver
			diff -C8 -b tar.tvf ${pyver}.tvf
			;;
	esac
done