#!/bin/bash
set -e

# stg-mdiff - display meta-diffs, ie. diffs of diffs

# Main use: show evolutions of a patch.
# eg. stg-mdiff foo@stable foo
#     stg-mdiff foo 012345567ABCD # sha1 for "foo" as integrated upstream

# Copyright (c) 2007 Yann Dirson <ydirson@altern.org>
# Subject to the GNU GPL, version 2.

usage()
{
    echo "Usage: [-o <diff-flags>] [-O <gitdiff-flags>] $(basename "$0") <from1>..[<to1>]|<patch1> <from2>..[<to2>]|<patch2>"
    exit 1
}

diffopts=
subdiffopts=
while [ "$#" -gt 0 ]; do
    case "$1" in
	-o) diffopts="$2"; shift ;;
	-O) subdiffopts="-O $2"; shift ;;
	-*) usage ;;
	*) break ;;
    esac
    shift
done

if [ "$#" != 2 ]; then
    usage
fi

if [ -z "$diffopts" ]; then
    diffopts="-u"
fi

case "$1" in
*..*) cmd1="stg diff $subdiffopts -r" ;;
*)    cmd1="stg show $subdiffopts" ;;
esac
case "$2" in
*..*) cmd2="stg diff $subdiffopts -r" ;;
*)    cmd2="stg show $subdiffopts" ;;
esac

colordiff $diffopts \
    -I '^index [0-9a-b]*..[0-9a-b]*' \
    -I '^@@ .* @@' \
    <($cmd1 "$1") <($cmd2 "$2") | less -RFX
