#!/bin/bash

verbose=0

if [ "$1" = "-v" ]; then
	verbose=1
	shift
fi

if [ $# != 3 ]; then
	echo "Usage: $0 [-v] host1[@host1] host2[@host2] basedir" >&2
	exit 1
fi

left1="${1%@*}"
left2="${1#*@}"

right1="${2%@*}"
right2="${2#*@}"

basedir="$3"

left_cmd="ssh $left1 'csync2 -or $basedir -P $right2 | sort | xargs md5sum 2> /dev/null'"
right_cmd="ssh $right1 'csync2 -or $basedir -P $left2 | sort | xargs md5sum 2> /dev/null'"

if [ $verbose -eq 1 ]; then
	echo
	echo "L: $left_cmd"
	echo "R: $right_cmd"
	echo
fi

diff -u <( eval "$left_cmd" ) <( eval "$right_cmd" ) | awk '

/^-[a-z0-9]/  { sub(/^./, ""); all[$2] = 1; left[$2]  = $1; }
/^\+[a-z0-9]/ { sub(/^./, ""); all[$2] = 1; right[$2] = $1; }

END {
	count = 0;
	for (filename in all) {
		printf "%s %s %s\n",
			(left[filename]  == "" ? "-" : "X"),
			(right[filename] == "" ? "-" : "X"),
			filename;
		count++;
	}
	if ('$verbose') {
		printf "Found %d differences.\n", count;
	}
}

'


if [ $verbose -eq 1 ]; then
	echo
	echo "X - ... Found this file on left host ($1) only."
	echo "- X ... Found this file on right host ($2) only."
	echo "X X ... Found file on both hosts but content is different."
	echo
fi

