git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ping Yin <pkufranky@gmail.com>
To: gitster@pobox.com
Cc: git@vger.kernel.org, Ping Yin <pkufranky@gmail.com>
Subject: [PATCH v3 3/4] git-submodule: New subcommand 'summary' (3) - limit summary size
Date: Mon,  3 Mar 2008 02:15:09 +0800	[thread overview]
Message-ID: <1204481710-29791-3-git-send-email-pkufranky@gmail.com> (raw)
In-Reply-To: <1204481710-29791-1-git-send-email-pkufranky@gmail.com>

This patch teaches git-submodule an option '--summary-limit|-n <number>'
to limit number of commits in total for the summary. Number 0 will disable
summary and minus number means unlimted (the default).

For beauty and clarification, the fork-point (i.e. the last commits for
both backward and forward sections) will always be shown disregarding the
given limit. So actual summary size may be greater than the given limit.

'git submodule summary -n 2 sm1' and 'git submodule summary -n 3 sm1'
will show the same in the super project mentioned in last patch.

---------------------------------------
 $ git submodule summary -n 2 sm1
 # Submodules modifiled: sm1
 #
 # * sm1 354cd45...3f751e5:
 #   <one line message for C
 #   <one line message for B
 #   >...
 #   >one line message for E
 #
---------------------------------------

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

diff --git a/git-submodule.sh b/git-submodule.sh
index 3313d6c..dfd2952 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -4,7 +4,9 @@
 #
 # Copyright (c) 2007 Lars Hjemli
 
-USAGE='[--quiet] [--cached] [add <repo> [-b branch]|status|init|update|summary [<commit>]] [--] [<path>...]'
+USAGE="[--quiet] [--cached] \
+[add <repo> [-b branch]|status|init|update|summary [-n|--summary-limit <n>] [<commit>]] \
+[--] [<path>...]"
 OPTIONS_SPEC=
 . git-sh-setup
 require_work_tree
@@ -329,6 +331,8 @@ set_name_rev () {
 # $@ = [commit (default 'HEAD'),] requested paths (default all)
 #
 cmd_summary() {
+	summary_limit=-1
+
 	# parse $args after "submodule ... summary".
 	while test $# -ne 0
 	do
@@ -336,6 +340,15 @@ cmd_summary() {
 		--cached)
 			cached="$1"
 			;;
+		-n|--summary-limit)
+			if summary_limit=$(($2 + 0)) 2>/dev/null && test "$summary_limit" = "$2"
+			then
+				:
+			else
+				usage
+			fi
+			shift
+			;;
 		--)
 			shift
 			break
@@ -350,6 +363,8 @@ cmd_summary() {
 		shift
 	done
 
+	test $summary_limit = 0 && return
+
 	if rev=$(git rev-parse --verify "$1^0" 2>/dev/null)
 	then
 		head=$rev
@@ -442,8 +457,52 @@ cmd_summary() {
 			# Don't give error msg for modification whose dst is not submodule, i.e. deleted or changed to blob
 			test $mod_dst = 160000 && 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)
+
+			if test $summary_limit -lt 0
+			then
+				lc=$lc0
+				rc=$rc0
+			elif test $lc0 -lt $summary_limit
+			then
+				lc=$lc0
+				rc=$(($summary_limit-$lc))
+			else
+				lc=$summary_limit
+				rc=1
+			fi
+
+			if test $rc -gt $rc0
+			then
+				rc=$rc0
+			fi
+
+			if test -n "$left"
+			then
+				skip=$(($lc0-$lc))
+				echo "$left" | head -$(($lc-1))
+				case $skip in
+					0) : ;;
+					1) echo "  <..." ;;
+					*) echo "  <... ($skip more)" ;;
+				esac
+				echo "$left" | tail -1
+			fi
+
+			if test -n "$right"
+			then
+				skip=$(($rc0-$rc))
+				echo "$right" | head -$(($rc-1))
+				case $skip in
+					0) : ;;
+					1) echo "  <..." ;;
+					*) echo "  <... ($skip more)" ;;
+				esac
+				echo "$right" | tail -1
+			fi
 		fi
 		echo
 	done | sed -e 's/^/# /'
-- 
1.5.4.3.347.g5314c


  parent reply	other threads:[~2008-03-02 18:15 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 ` Ping Yin [this message]
2008-03-06  0:24   ` [PATCH v3 3/4] git-submodule: New subcommand 'summary' (3) - limit summary size 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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1204481710-29791-3-git-send-email-pkufranky@gmail.com \
    --to=pkufranky@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).