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

[PATCH 10/10] Add -s option to show log summary

From
Jonas Fonseca <fonseca@diku.dk>
Date
Jun 4, 2005, 14:43 UTC
Message-ID
<20050604144334.GN12615@diku.dk>
In-Reply-To
<20050604143831.GD12615@diku.dk>

When passing -s to cg-log each log entry is summarized in one line. The line carries info about commit date, author, first log line and the commit id. It will look something like the following (with only:

  2005-05-20 11:46 Linus Torvalds   sparse cleanup   e99d59ff0bff349ef20...

The result ends up being 130 chars wide however the commit id is placed so that it can easily be hidden if line wrapping in the pager is enabled.

Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
---
 cg-Xlib |    4 +++-
 cg-log  |   53 ++++++++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 47 insertions(+), 10 deletions(-)
diff --git a/cg-Xlib b/cg-Xlib
--- a/cg-Xlib
+++ b/cg-Xlib
@@ -47,10 +47,12 @@ mktemp () {
 
 showdate () {
 	date="$1"
+	format="$2"
+	[ "$format" ] || format=-R
 	sec=${date[0]}; tz=${date[1]}
 	dtz=${tz/+/}
 	lsec=$(expr $dtz / 100 \* 3600 + $dtz % 100 \* 60 + $sec)
-	pdate="$(date -Rud "1970-01-01 UTC + $lsec sec" 2>/dev/null)"
+	pdate="$(date -ud "1970-01-01 UTC + $lsec sec" "$format" 2>/dev/null)"
 
 	echo "${pdate/+0000/$tz}"
 }
diff --git a/cg-log b/cg-log
--- a/cg-log
+++ b/cg-log
@@ -14,15 +14,21 @@
 # cg-log then displays only changes in those files.
 #
 # -c::
-#	Add color to the output. Currently, the colors are:
-#	- `author`:	'cyan'
-#	- `committer`:	'magenta'
-#	- `header`:	'green'
-#	- `files`:	'blue'
-#	- `signoff`:	'yellow'
+#	Colorize to the output. When getting log summary the `date` is
+#	colored 'green', the `author` is colored 'cyan', the `commit ID`
+#	is colored 'blue' and the special line trimming character (~) is
+#	colored 'magenta'. +
+#	+
+#	When getting the full log the colors are:
+#		- `author`:	'cyan'
+#		- `committer`:	'magenta'
+#		- `header`:	'green'
+#		- `files`:	'blue'
+#		- `signoff`:	'yellow'
 #
 # -f::
-#	List affected files.
+#	List affected files. This option does not make sense when using
+#	`-s` to get a log summary.
 #
 # -r FROM_ID[:TO_ID]::
 #	Limit the log information to a set of revisions using either
@@ -36,6 +42,12 @@
 #	End the log listing at the merge base of the -r arguments
 #	(defaulting to master and origin).
 #
+# -s::
+#	Show a one line summary for each log entry. The summary contains
+#	information about the commit date, the author, the first line
+#	of the commit log and the commit ID. Long author and commit log
+#	titles are trimmed but marked with an ending tilde (~).
+#
 # -uUSERNAME::
 #	List only commits where author or committer contains 'USERNAME'.
 #	The search for 'USERNAME' is case-insensitive.
@@ -55,7 +67,7 @@
 #
 #	$ cg-log -r releasetag-0.9:releasetag-0.10
 
-USAGE="cg-log [-c] [-f] [m] [-uUSERNAME] [-r FROM_ID[:TO_ID] FILE..."
+USAGE="cg-log [-c] [-f] [-m] [-s] [-uUSERNAME] [-r FROM_ID[:TO_ID] FILE..."
 
 . ${COGITO_LIB}cg-Xlib
 # Try to fix the annoying "Broken pipe" output. May not help, but apparently
@@ -71,6 +83,7 @@ coldefault=
 list_files=
 log_start=
 log_end=
+summary=
 user=
 mergebase=
 files=()
@@ -107,6 +120,9 @@ while [ "$1" ]; do
 	-m)
 		mergebase=1
 		;;
+	-s)
+		summary=1
+		;;
 	*)
 		files=("$@")
 		break
@@ -196,6 +212,8 @@ print_commit_log() {
 					echo -e "author $author\ncommitter $committer" \
 						| grep -qi "$user" || return
 				fi
+				[ "$summary" ] && continue
+
 				echo ${colheader}commit ${commit%:*} $coldefault
 				echo ${colheader}tree $tree $coldefault
 
@@ -222,6 +240,23 @@ print_commit_log() {
 					s/./    &/
 				'
 				;;
+			*)
+				# Print summary
+				author="${author% <*}"
+				date=(${committer#*> })
+				date="$(showdate $date '+%F %H:%M')"
+				title="$key $rest"
+				if [ "${#title}" -gt 51 ]; then
+					title="${title:0:50}$colcommitter~"
+				fi
+				if [ "${#author}" -gt 20 ]; then
+					author="${author:0:19}$colcommitter~"
+				fi
+
+				printf "$colheader$date $colauthor%-20s $coldefault%-51s $colfiles${commit%:*}$coldefault\n" \
+					"$author" "$title"
+				return
+				;;
 			esac
 		done
 }
@@ -232,6 +267,6 @@ $revls | $revsort | while read time comm
 	log="$(print_commit_log $commit)"
 	if [ "$log" ]; then
 		echo "$log"
-		echo
+		[ "$summary" ] || echo
 	fi
 done | pager
-- 
Jonas Fonseca
Previous: Jonas Fonseca
Message 11 of 11 in “[PATCHSET] cg-log cleanups and enhancements”
  1. Jonas FonsecaJun 4, 2005
  2. 1/10 Cleanup conversion to human readable dateJonas Fonseca, Jun 4, 2005
  3. 2/10 Separate handling of tree and parent in commit headersJonas Fonseca, Jun 4, 2005
  4. 3/10 Separate handling of author and committer in commit headersJonas Fonseca, Jun 4, 2005
  5. 4/10 First parse all commit header entries then print themJonas Fonseca, Jun 4, 2005
  6. 5/10 Move printing of the commit info line inside the loopJonas Fonseca, Jun 4, 2005
  7. 6/10 Remove the catch all ruleJonas Fonseca, Jun 4, 2005
  8. 7/10 Move log printing to separate functionJonas Fonseca, Jun 4, 2005
  9. 8/10 Move the username matching inside the loopJonas Fonseca, Jun 4, 2005
  10. 9/10 Move file matching inside the loop.Jonas Fonseca, Jun 4, 2005
  11. 10/10 Add -s option to show log summaryJonas Fonseca, Jun 4, 2005

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.