All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/4] git-submodule: New subcommand 'summary' (1) - code framework
@ 2008-03-02 18:15 Ping Yin
  2008-03-02 18:15 ` [PATCH v3 2/4] git-submodule: New subcommand 'summary' (2) - show commit summary Ping Yin
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Ping Yin @ 2008-03-02 18:15 UTC (permalink / raw)
  To: gitster; +Cc: git, Ping Yin

Following patches will teach git-submodule a new subcommand 'summary' to
show commit summary of user-cared (i.e. checked out) submodules between
a given super project commit (default HEAD) and working tree
(or index, switched by --cached).

This patch just introduces the framework and shows submodules modified
as follows.

--------------------------------------------
 $ git submodule summary
 # Submodules modifiled: sm1 sm2 sm3 sm4 sm5
 #
--------------------------------------------

Signed-off-by: Ping Yin <pkufranky@gmail.com>
---
 git-submodule.sh |   66 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 61 insertions(+), 5 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index a6aaf40..787d083 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 2007 Lars Hjemli
 
-USAGE='[--quiet] [--cached] [add <repo> [-b branch]|status|init|update] [--] [<path>...]'
+USAGE='[--quiet] [--cached] [add <repo> [-b branch]|status|init|update|summary [<commit>]] [--] [<path>...]'
 OPTIONS_SPEC=
 . git-sh-setup
 require_work_tree
@@ -320,7 +320,63 @@ set_name_rev () {
 	) )
 	test -z "$revname" || revname=" ($revname)"
 }
+#
+# Show commit summary for submodules in index or working tree
+#
+# If '--cached' is given, show summary between index and given commit,
+# or between working tree and given commit
+#
+# $@ = [commit (default 'HEAD'),] requested paths (default all)
+#
+cmd_summary() {
+	# parse $args after "submodule ... summary".
+	while test $# -ne 0
+	do
+		case "$1" in
+		--cached)
+			cached="$1"
+			;;
+		--)
+			shift
+			break
+			;;
+		-*)
+			usage
+			;;
+		*)
+			break
+			;;
+		esac
+		shift
+	done
 
+	if rev=$(git rev-parse --verify "$1^0" 2>/dev/null)
+	then
+		head=$rev
+		shift
+	else
+		head=HEAD
+	fi
+
+	cd_to_toplevel
+	# Get modified modules cared by user
+	modules=$(git diff-index $cached --raw $head -- "$@" |
+		grep -e '^:160000' -e '^:[0-7]* 160000' |
+		while read mod_src mod_dst sha1_src sha1_dst status name
+		do
+			# Always show modules deleted or type-changed (blob<->module)
+			test $status = D -o $status = T && echo "$name" && continue
+			# Also show added or modified modules which are checked out
+			GIT_DIR="$name/.git" git-rev-parse --git-dir >/dev/null 2>&1 &&
+			echo "$name"
+		done
+	)
+
+	# TODO: quote module names containing space or tab
+	test -n "$modules" &&
+	echo "# Submodules modified: "$modules &&
+	echo "#"
+}
 #
 # List all submodules, prefixed with:
 #  - submodule not initialized
@@ -391,7 +447,7 @@ cmd_status()
 while test $# != 0 && test -z "$command"
 do
 	case "$1" in
-	add | init | update | status)
+	add | init | update | status | summary)
 		command=$1
 		;;
 	-q|--quiet)
@@ -406,7 +462,7 @@ do
 		branch="$2"; shift
 		;;
 	--cached)
-		cached=1
+		cached="$1"
 		;;
 	--)
 		break
@@ -430,8 +486,8 @@ then
 	usage
 fi
 
-# "--cached" is accepted only by "status"
-if test -n "$cached" && test "$command" != status
+# "--cached" is accepted only by "status" and "summary"
+if test -n "$cached" && test "$command" != status -a "$command" != summary
 then
 	usage
 fi
-- 
1.5.4.3.347.g5314c


^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2008-03-07  1:51 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-02 18:15 [PATCH v3 1/4] git-submodule: New subcommand 'summary' (1) - code framework Ping Yin
2008-03-02 18:15 ` [PATCH v3 2/4] git-submodule: New subcommand 'summary' (2) - show commit summary Ping Yin
2008-03-05 23:57   ` Junio C Hamano
2008-03-06  2:16     ` Ping Yin
2008-03-06  4:10       ` Junio C Hamano
2008-03-06  5:56         ` Ping Yin
2008-03-06 10:42           ` Junio C Hamano
2008-03-06 11:36             ` Ping Yin
2008-03-02 18:15 ` [PATCH v3 3/4] git-submodule: New subcommand 'summary' (3) - limit summary size Ping Yin
2008-03-06  0:24   ` Junio C Hamano
2008-03-06  2:24     ` Ping Yin
2008-03-07  1:50       ` Ping Yin
2008-03-02 18:15 ` [PATCH v3 4/4] git-submodule: New subcommand 'summary' (4) - Update the document Ping Yin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.