#!/bin/bash
command -v colordiff >&/dev/null &&
    diffprog="colordiff -u" ||
    diffprog="diff -u"

if [[ -z "$1" ]] ; then
    echo "Needs argument"
    exit -1
fi

if [[ -n "$2" ]] ; then
    diffprog="$2"
fi

dir=$(dirname "$1")
base=$(basename "$1")

[[ "$dir" == "." ]] && dir="" || dir="$dir/"

if [[ -d "${dir}.bak/" ]] ; then
    backupdir="${dir}.bak/"
elif [[ -d "${dir}.backup/" ]] ; then
    backupdir="${dir}.backup/"
elif [[ -d "${dir}_bak/" ]] ; then
    backupdir="${dir}_bak/"
elif [[ -d "${dir}_backup/" ]] ; then
    backupdir="${dir}_backup/"
else
    backupdir=""
fi

declare -a backups
backups=(`\ls -rt ${backupdir}$base.\~* 2>/dev/null`)
if [[ ${#backups[@]} -eq 0 ]] ; then
    echo "No backups found"
    exit 1
fi

while true
do
    for ((i = 0; i < ${#backups[@]}; i++ )) do
        backuptime=$(date -r "${backups[$i]}")
            printf "(%4d) %-35s %s\n" $i "${backups[$i]}" "$backuptime"
    done
    echo -n "Enter backup number> "
    read -r num
    $diffprog "${backups[$num]}" "$dir$base"
    echo "Enter for again or ^C to stop"
    read
done
