#!/bin/bash

set -u

#
# Extract tar files and compare them
#

: ${DIFF:=diff}
: ${PAGER:=less}

usage () {
    echo "${0##*/} <archive1> <archive2>"
    exit 2
}

[[ $# -ge 2 ]] || usage
archive1=$1
archive2=$2
shift 2

[[ -f $archive1 ]] || { echo "$archive1 doesn't exist" >&2; exit 1; }
[[ -f $archive2 ]] || { echo "$archive2 doesn't exist" >&2; exit 1; }

dir1=$(mktemp -d)
dir2=$(mktemp -d)
trap "rm -rf $dir1 $dir2" EXIT ERR

function extract_archive {
    case $1 in
            (*.tar.bz2) tar -xjf "$1" ;;
            (*.tar.gz) tar -xzf "$1" ;;
            (*.bz2) bunzip2 "$1" ;;
            (*.rar) unrar x "$1" ;;
            (*.gz) gunzip "$1" ;;
            (*.tar) tar -xf "$1" ;;
            (*.tbz2) tar -xjf "$1" ;;
            (*.tgz) tar -xzf "$1" ;;
            (*.zip) unzip -q "$1" ;;
            (*.Z) uncompress "$1" ;;
            (*.7z) 7z x "$1" ;;
            (*.tar.xz) xz -d "$1" -c | tar -xf - ;;
            (*.xz) xz -d "$1" ;;
            (*.rpm) rpm2cpio "$1" | cpio -id ;;
            (*.jar) jar -xf "$1" ;;
            (*) echo ">>> '$1' cannot be extracted via $0"; exit 1 ;;
    esac
}

function getrealpath {
    python -c 'import os,sys; sys.stdout.write(os.path.realpath(r"""'"${1:-.}"'""")+"\n")'
}

archive1=$(getrealpath "$archive1")
archive2=$(getrealpath "$archive2")

pushd $dir1 &>/dev/null
extract "$archive1"
popd &>/dev/null
pushd $dir2 &>/dev/null
extract "$archive2"
popd &>/dev/null

$DIFF $dir1 $dir2 -r "$@" | $PAGER

