This script outputs a "metadiff" (diff of diffs, ie. diff between 2 versions of a single patch). This is somewhat a proof of concept, and some work is indeed needed in the way to present the results. Consider filtering the output at least through colordiff. I have 2 uses for this script: - when simply editing a patch, provides a 3rd way to check what I've done before refreshing (in addition to "stg diff" and "stg diff -r //bottom") - most usefully, when resolving conflicts caused by a push, to ease checking of the merge result. Signed-off-by: Yann Dirson <ydirson@xxxxxxxxxx> --- contrib/stg-whatchanged | 37 +++++++++++++++++++++++++++++++++++++ 1 files changed, 37 insertions(+), 0 deletions(-) diff --git a/contrib/stg-whatchanged b/contrib/stg-whatchanged new file mode 100755 index 0000000..f80d0a1 --- /dev/null +++ b/contrib/stg-whatchanged @@ -0,0 +1,37 @@ +#!/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@xxxxxxxxxx> +# 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)/$(stg top)" +if [ $(cat "$patchdir/bottom") = $(cat "$patchdir/top") ]; +then + current_cmd="stg show //top.old" +else + current_cmd="stg show" +fi + +colordiff "$@" \ + -I '^index [0-9a-b]*..[0-9a-b]*' \ + -I '^@@ .* @@' \ + <($current_cmd) <(stg diff -r//bottom) | less -RFX - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html