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

[PATCH] git-submodule: New subcommand 'summary' (3) - limit summary size

From
Ping Yin <pkufranky@gmail.com>
Date
Dec 31, 2007, 17:35 UTC
Message-ID
<1199122505-27478-4-git-send-email-pkufranky@gmail.com>
In-Reply-To
<1199122505-27478-1-git-send-email-pkufranky@gmail.com>

This patches teaches git-submodule an option '--summary-limit|-n <number>' to limit number of commits for the summary. Number 0 will disable summary and minus number will not limit the summary size.

For beauty and clarification, the last commit for each section (backward and forward) will always be shown disregarding the given limit. So actual summary size may be greater than the given limit.

In the same super project of these patch series, 'git submodule -n 2' and
'git submodule -n 3' will both show
    # Submodules modifiled: sm1 sm2 sm3
    #
    # * sm1 354cd45...3f751e5:
    #   <one line message for C
    #   <one line message for B
    #   >... (1 more)
    #   >one line message for E
    #
    # * sm2 5c8bfb5...000000:
    #   <one line message for F
    #
    # * sm3 354cd45...3f751e5:
    #   Warn: sm3 doesn't contain commit 354cd45
    #
Signed-off-by: Ping Yin <pkufranky@gmail.com>
---
 git-submodule.sh |   40 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index cccb539..58d0243 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -4,7 +4,8 @@
 #
 # Copyright (c) 2007 Lars Hjemli
 
-USAGE='[--quiet] [--cached] [add <repo> [-b branch]|status|init|update|summary <commit>] [--] [<path>...]'
+USAGE="[--quiet] [--cached] [-n|--summary-limit <number>] \
+[add <repo> [-b branch]|status|init|update|summary <commit>] [--] [<path>...]"
 OPTIONS_SPEC=
 . git-sh-setup
 require_work_tree
@@ -16,6 +17,7 @@ update=
 status=
 quiet=
 cached=
+summary_limit=
 
 #
 # print stuff on stdout unless -q was specified
@@ -265,6 +267,10 @@ set_name_rev () {
 #
 modules_summary()
 {
+	summary_limit=${summary_limit:-1000000}
+	summary_limit=$((summary_limit<0?1000000:summary_limit))
+	test $summary_limit = 0 && return
+
 	cache_option=${cached:+--cached}
 
 	if rev=$(git rev-parse --verify "$1^0" 2>/dev/null)
@@ -352,8 +358,29 @@ modules_summary()
 			then
 				echo "$errmsg"
 			else
-				test -n "$left" && echo "$left"
-				test -n "$right" && echo "$right"
+				lc0=0
+				rc0=0
+				test -n "$left" && lc0=$(echo "$left" | wc -l)
+				test -n "$right" && rc0=$(echo "$right" | wc -l)
+				lc=$((lc0<summary_limit?lc0:summary_limit))
+				rc=$((summary_limit>lc?summary_limit-lc:1))
+				rc=$((rc<rc0?rc:rc0))
+
+				if test -n "$left"
+				then
+					skip=$((lc0-lc))
+					echo "$left" | head -$((lc-1))
+					test $skip != 0 && echo "  <... ($skip more)"
+					echo "$left" | tail -1
+				fi
+
+				if test -n "$right"
+				then
+					skip=$((rc0-rc))
+					echo "$right" | head -$((rc-1))
+					test $skip != 0 && echo "  >... ($skip more)"
+					echo "$right" | tail -1
+				fi
 			fi
 			echo
 		) | sed 's/^/# /'
@@ -430,6 +457,13 @@ do
 	--cached)
 		cached=1
 		;;
+	-n|--summary-limit)
+		if [ -z "$2" ]; then
+			usage
+		fi
+		summary_limit="$2"
+		shift
+		;;
 	--)
 		break
 		;;
-- 
1.5.4.rc2.9.gf5146-dirty
Previous: Ping YinNext: Ping Yin
Message 4 of 6 in “git-submodule: New subcommand 'summary'”
  1. git-submodule: New subcommand 'summary'Ping Yin, Dec 31, 2007
  2. git-submodule: New subcommand 'summary' (1) - code frameworkPing Yin, Dec 31, 2007
  3. git-submodule: New subcommand 'summary' (2) - hard workPing Yin, Dec 31, 2007
  4. git-submodule: New subcommand 'summary' (3) - limit summary sizePing Yin, Dec 31, 2007
  5. Ping YinJan 8, 2008
  6. Imran M YousufJan 9, 2008

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.