#!/bin/bash
set -e

# stg-whatchanged - show a metadiff for the patch being modified,
# especially when resolving a merge.

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

# FIXME:
# - should only exclude hunk headers differing only in line offsets
# - diff coloring should show changes in context lines differently than
#   changes in contents
# - filter on ^index lines is a bit wide
# - we should be able to ask diff to force a new hunk on "^@@ " to better
#   handle them
# - we should always show the hunk header for any changes within a hunk

# default to unified diff
if [ "$#" = 0 ]; then
    set -- -u
fi

# Merges via "push" leave top=bottom so we must look at old patch
# in this case (unlike, eg., "pick --fold")
patchdir="$(git rev-parse --git-dir)/patches/$(stg branch)/patches/$(stg top)"
case $(stg log | head -n1) in
    *push\(c\)*) former="//top.old" ;;
    *) former="//top" ;;
esac

stg-mdiff -o "$*" \
    $former //bottom..
