threads / patch / 16163

v2, 2 partspost-receive-email configurable rev display

Subject: [PATCH v2 0/2] post-receive-email configurable rev display

## tl;dr

4 messages between Nov 4, 2008 and Nov 4, 2008. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Pete Harlan· Nov 4, 2008, 07:19 UTC · lore

This is the second version of the user-configurable revision display patch. The first version decreased the efficiency of the default case, while this avoids it thanks to a suggestion by Junio.

The first version of this patch also failed to customize the display of revisions included in newly-created branches; this version displays those revisions in the same manner as for updated branches.

The two places (new vs. updated branches) where the original code displayed revisions used similar code. The first patch in this series factors that out to a separate routine that handles both cases, in order to avoid duplicating the code introduced in the second patch.

Pete Harlan (2):
  contrib/hooks/post-receive-email: Put rev display in separate
    function
  contrib/hooks/post-receive-email: Make revision display configurable
 contrib/hooks/post-receive-email |   57 ++++++++++++++++++++++++++++++++------
 1 files changed, 48 insertions(+), 9 deletions(-)
Pete Harlan· Nov 4, 2008, 07:19 UTC · re: Pete Harlan · lore

[PATCH v2 1/2] contrib/hooks/post-receive-email: Put rev display in separate function

The display of a revision in an email-appropriate format is done in two places with similar code. In preparation for making that display more complex, move it into a separate function that handles both cases.

Signed-off-by: Pete Harlan <pgit@pcharlan.com>
---
 contrib/hooks/post-receive-email |   41 +++++++++++++++++++++++++++++--------
 1 files changed, 32 insertions(+), 9 deletions(-)
Show changes to contrib/hooks/post-receive-email +32 −9
diff --git a/contrib/hooks/post-receive-email b/contrib/hooks/post-receive-email
index 4136895..2cd373d 100644
--- a/contrib/hooks/post-receive-email
+++ b/contrib/hooks/post-receive-email
@@ -224,13 +224,7 @@ generate_create_branch_email()
 	echo ""
 
 	echo $LOGBEGIN
-	# This shows all log entries that are not already covered by
-	# another ref - i.e. commits that are now accessible from this
-	# ref that were previously not accessible
-	# (see generate_update_branch_email for the explanation of this
-	# command)
-	git rev-parse --not --branches | grep -v $(git rev-parse $refname) |
-	git rev-list --pretty --stdin $newrev
+	show_new_revisions
 	echo $LOGEND
 }
 
@@ -390,8 +384,7 @@ generate_update_branch_email()
 
 		echo ""
 		echo $LOGBEGIN
-		git rev-parse --not --branches | grep -v $(git rev-parse $refname) |
-		git rev-list --pretty --stdin $oldrev..$newrev
+		show_new_revisions
 
 		# XXX: Need a way of detecting whether git rev-list actually
 		# outputted anything, so that we can issue a "no new
@@ -591,6 +584,36 @@ generate_delete_general_email()
 	echo $LOGEND
 }
 
+
+# --------------- Miscellaneous utilities
+
+#
+# Show new revisions as the user would like to see them in the email.
+#
+show_new_revisions()
+{
+	# This shows all log entries that are not already covered by
+	# another ref - i.e. commits that are now accessible from this
+	# ref that were previously not accessible
+	# (see generate_update_branch_email for the explanation of this
+	# command)
+
+	# Revision range passed to rev-list differs for new vs. updated
+	# branches.
+	if [ "$change_type" = create ]
+	then
+		# Show all revisions exclusive to this (new) branch.
+		revspec=$newrev
+	else
+		# Branch update; show revisions not part of $oldrev.
+		revspec=$oldrev..$newrev
+	fi
+
+	git rev-parse --not --branches | grep -v $(git rev-parse $refname) |
+	git rev-list --pretty --stdin $revspec
+}
+
+
 send_mail()
 {
 	if [ -n "$envelopesender" ]; then
-- 
1.6.0.3.533.ge0502
Pete Harlan· Nov 4, 2008, 07:19 UTC · re: Pete Harlan · lore

[PATCH v2 2/2] contrib/hooks/post-receive-email: Make revision display configurable

Add configuration option hooks.showrev, letting the user override how revisions will be shown in the commit email.

Signed-off-by: Pete Harlan <pgit@pcharlan.com>
---
 contrib/hooks/post-receive-email |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)
Show changes to contrib/hooks/post-receive-email +17 −1
diff --git a/contrib/hooks/post-receive-email b/contrib/hooks/post-receive-email
index 2cd373d..28a3c0e 100644
--- a/contrib/hooks/post-receive-email
+++ b/contrib/hooks/post-receive-email
@@ -38,6 +38,12 @@
 # hooks.emailprefix
 #   All emails have their subjects prefixed with this prefix, or "[SCM]"
 #   if emailprefix is unset, to aid filtering
+# hooks.showrev
+#   The shell command used to format each revision in the email, with
+#   "%s" replaced with the commit id.  Defaults to "git rev-list -1
+#   --pretty %s", displaying the commit id, author, date and log
+#   message.  To list full patches separated by a blank line, you
+#   could set this to "git show -C %s; echo".
 #
 # Notes
 # -----
@@ -610,7 +616,16 @@ show_new_revisions()
 	fi
 
 	git rev-parse --not --branches | grep -v $(git rev-parse $refname) |
-	git rev-list --pretty --stdin $revspec
+	if [ -z "$custom_showrev" ]
+	then
+		git rev-list --pretty --stdin $revspec
+	else
+		git rev-list --stdin $revspec |
+		while read onerev
+		do
+			eval $(printf "$custom_showrev" $onerev)
+		done
+	fi
 }
 
 
@@ -650,6 +665,7 @@ recipients=$(git config hooks.mailinglist)
 announcerecipients=$(git config hooks.announcelist)
 envelopesender=$(git config hooks.envelopesender)
 emailprefix=$(git config hooks.emailprefix || echo '[SCM] ')
+custom_showrev=$(git config hooks.showrev)
 
 # --- Main loop
 # Allow dual mode: run from the command line just like the update hook, or
-- 
1.6.0.3.533.ge0502

← back to recent threads