]> git.phdru.name Git - git-scripts.git/blobdiff - submodules/diff-name-only
Add script `submodules/diff-name-only`
[git-scripts.git] / submodules / diff-name-only
diff --git a/submodules/diff-name-only b/submodules/diff-name-only
new file mode 100755 (executable)
index 0000000..d513613
--- /dev/null
@@ -0,0 +1,20 @@
+#! /bin/sh
+# See the discussion at https://stackoverflow.com/q/67724347/7976758
+
+if [ -z "$1" ]; then
+    echo "Usage $0 from_commit [to_commit]"
+    exit 1
+fi
+
+from_commit="$1"
+to_commit="${2:-HEAD}"
+
+# In the superproject
+git --no-pager diff --name-only "$from_commit" "$to_commit"
+
+git submodule foreach "
+    # In submodule \"\$name\"
+    prev_commit=\`(git -C \"\$toplevel\" ls-tree "$from_commit" \"\$sm_path\" | awk '{print \$3}')\`
+    curr_commit=\`(git -C \"\$toplevel\" ls-tree "$to_commit" \"\$sm_path\" | awk '{print \$3}')\`
+    git --no-pager diff --name-only \$prev_commit \$curr_commit
+"