This patch does the hard work of submodule summary and finally gives output shown in last patch. Signed-off-by: Ping Yin <pkufranky@xxxxxxxxx> --- git-submodule.sh | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 67 insertions(+), 1 deletions(-) diff --git a/git-submodule.sh b/git-submodule.sh index 0e81484..cccb539 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -292,7 +292,73 @@ modules_summary() # TODO: quote module names containing space or tab test -n "$modules" && echo "# Submodules modified: "$modules && - echo "#" + echo "#" && + git diff $cache_option --raw $head -- $modules | + grep '^:160000\|:000000 160000' | + cut -c2- | + while read mod_src mod_dst sha1_src sha1_dst status name + do + sha1_dst=$(echo $sha1_dst | cut -c1-7) + sha1_src=$(echo $sha1_src | cut -c1-7) + check_dst=t + check_src=t + case $status in + D) + check_dst= + ;; + A) + check_src= + ;; + esac + + ( + errmsg= + unfound_src= + unfound_dst= + + test -z "$check_src" || + GIT_DIR="$name/.git" git-rev-parse $sha1_src >&/dev/null || + unfound_src=t + + test -z "$check_dst" || + GIT_DIR="$name/.git" git-rev-parse $sha1_dst >&/dev/null || + unfound_dst=t + + case "$unfound_src,$unfound_dst" in + t,) + errmsg=" Warn: $name doesn't contain commit $sha1_src" + ;; + ,t) + errmsg=" Warn: $name doesn't contain commit $sha1_dst" + ;; + t,t) + errmsg=" Warn: $name doesn't contain commits $sha1_src and $sha1_dst" + ;; + *) + left= + right= + test -n "$check_src" && + left=$(GIT_DIR="$name/.git" git log --pretty=format:" <%s" \ + ${check_dst:+$sha1_dst..}$sha1_src 2>/dev/null) + + test -n "$check_dst" && + right=$(GIT_DIR="$name/.git" git log --reverse --pretty=format:" >%s" \ + ${check_src:+$sha1_src..}$sha1_dst 2>/dev/null) + ;; + esac + + echo "* $name $sha1_src...$sha1_dst:" + if test -n "$errmsg" + then + echo "$errmsg" + else + test -n "$left" && echo "$left" + test -n "$right" && echo "$right" + fi + echo + ) | sed 's/^/# /' + done + cd "$cwd" } # -- 1.5.4.rc2.9.gf5146-dirty - 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