#!/usr/bin/env bash

set -eu

hn=$(set -eu; hostname)

rm -rf save-dir-*

case "$(uname -s)" in
	Haiku)
		echo "$0: This test fails on Haiku because it has no os.major or os.minor in its python" 1>&2
		exit 0
		;;
esac

function seder
{
	# This isn't as necessary as it once was, but we keep it anyway in case we revert to the old behavior someday

	sed -e 's/  */ /g' | \
		../canonicalize-dates
}

function file_list
{
	find \
		$([ -e /dev/zero ] && echo /dev/zero) \
		$([ -e /dev/null ] && echo /dev/null) \
		$([ -e /dev/random ] && echo /dev/random) \
		$([ -e /dev/urandom ] && echo /dev/urandom) \
		$([ -e /dev/ram0 ] && echo /dev/ram0) \
		$([ -e /dev/sda ] && echo /dev/sda) \
		$([ -e /usr/bin/at ] && echo /usr/bin/at) \
		-print0
}

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

file_list | \
	$tar --null --no-recursion --files-from - --create --file - | \
	$tar tvf - 2>&1 | \
	../old-gtar-timestamps-to-new | \
	seder | \
	sort > tar.tvf

for record in $(../../this-interpreter --variety minimal-a; ../../this-interpreter --variety minimal-b)
do
	pyver=$(echo "$record" | awk -F'%' ' { print $1 }')
	python=$(echo "$record" | awk -F'%' ' { print $2 }')

	rm -rf "save-dir-$pyver"

	file_list | \
		$python ../../backshift --save-directory save-dir-$pyver --backup --hostname $(hostname) --subset test --init-savedir

	backup_id=$($python ../../backshift --list-backups --save-directory save-dir-$pyver | tail -1 | cut -d ' ' -f 1)

	$python ../../backshift --save-directory save-dir-$pyver --backup-id $backup_id --list-backup 2>&1 | \
		seder | \
		sort > backshift.tvf.$pyver

	diff -C3 -b tar.tvf backshift.tvf.$pyver
done