git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/8] Add contrib/stg-whatchanged: look at what would be changed by refreshing.

From
Yann Dirson <ydirson@altern.org>
Date
Mar 1, 2007, 23:03 UTC
Message-ID
<20070301230339.32459.18579.stgit@gandelf.nowhere.earth>
In-Reply-To
<20070301225651.32459.89156.stgit@gandelf.nowhere.earth>

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@altern.org>
---
 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@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)/$(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
Previous: Yann DirsonNext: Yann Dirson
Message 2 of 9 in “My set of stgit helper scripts (update)”
  1. 0/8 My set of stgit helper scripts (update)Yann Dirson, Mar 1, 2007
  2. 1/8 Add contrib/stg-whatchanged: look at what would be changed by refreshing.Yann Dirson, Mar 1, 2007
  3. 2/8 Add contrib/stg-show-old: show old version of a patch.Yann Dirson, Mar 1, 2007
  4. 3/8 Add contrib/stg-fold-files-from: pick selected changes from a patch above current oneYann Dirson, Mar 1, 2007
  5. 4/8 Add contrib/stg-swallow: completely merge an unapplied patch into current oneYann Dirson, Mar 1, 2007
  6. 5/8 Add contrib/stg-cvs: helper script to manage a mixed cvs/stgit working copyYann Dirson, Mar 1, 2007
  7. 6/8 Add contrib/stg-gitk: helper script to run gitkYann Dirson, Mar 1, 2007
  8. 7/8 Add contrib/stg-mdiff: display diffs of diffs.Yann Dirson, Mar 1, 2007
  9. 8/8 Add contrib/stg-sink: sink a patch to given location (mirrors float).Yann Dirson, Mar 1, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.