]> oss.titaniummirror.com Git - git-utils.git/blobdiff - git-diffall
Add git-diffall
[git-utils.git] / git-diffall
diff --git a/git-diffall b/git-diffall
new file mode 100755 (executable)
index 0000000..dd8dd46
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+. "$(git --exec-path)/git-sh-setup"
+cd_to_toplevel # for the tar below
+
+pre="${1-HEAD}"
+post="$2"
+
+tmp="$(mktemp -d)"
+
+cleanup () {
+       rm -rf $tmp
+}
+
+trap cleanup EXIT
+
+mkdir "$tmp"/a "$tmp"/b
+
+if [ -n "$post" ]; then
+       git diff --name-only "$pre" "$post" > "$tmp"/filelist
+       while read name; do
+               mkdir -p "$tmp"/b/"$(dirname "$name")"
+               git show "$post":"$name" > "$tmp"/b/"$name"
+       done < "$tmp"/filelist
+else
+       git diff --name-only "$pre" > "$tmp"/filelist
+       tar -c -T "$tmp"/filelist | (cd "$tmp"/b && tar -x)
+fi
+
+while read name; do
+       mkdir -p "$tmp"/a/"$(dirname "$name")"
+       git show "$pre":"$name" > "$tmp"/a/"$name"
+done < "$tmp"/filelist
+
+cd "$tmp"
+#meld a b
+#diff -ur a b
+kdiff3 a b