From: Marc Branchaud <marcnarc@xiplink.com>
To: Mike Frysinger <vapier@gentoo.org>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] post-receive-email: allow customizing of subject/intro/footer
Date: Thu, 21 Jan 2010 12:02:58 -0500 [thread overview]
Message-ID: <4B5888C2.60508@xiplink.com> (raw)
In-Reply-To: <1263877931-26047-1-git-send-email-vapier@gentoo.org>
Thanks for this! I've been meaning to do something similar myself. :)
A couple of thoughts struck me while looking through your patch...
Mike Frysinger wrote:
> The format of the subject/intro/footer are noise imo, but rather than
> debate the issue, let the user customize the output using the existing
> git config hooks section. The default output is retained for each part.
>
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> ---
> contrib/hooks/post-receive-email | 76 +++++++++++++++++++++++++++++---------
> 1 files changed, 58 insertions(+), 18 deletions(-)
>
> diff --git a/contrib/hooks/post-receive-email b/contrib/hooks/post-receive-email
> index 58a35c8..79ab6b1 100755
> --- a/contrib/hooks/post-receive-email
> +++ b/contrib/hooks/post-receive-email
> @@ -38,6 +38,15 @@
> # hooks.emailprefix
> # All emails have their subjects prefixed with this prefix, or "[SCM]"
> # if emailprefix is unset, to aid filtering
> +# hooks.emailsubject
> +# Allow customizing of the subject. Default is a description of what
> +# ref changed and how/why.
> +# hooks.emailbodyintro
> +# Allow customizing of the body intro. Default is friendly paragraph that
> +# explains why the user is receiving this e-mail and what has changed.
> +# hooks.emailfooter
> +# Allow customizing of the footer. Default is name of the script and the
> +# repo description.
> # 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
> @@ -55,6 +64,10 @@
> # "X-Git-Newrev", and "X-Git-Reftype" to enable fine tuned filtering and
> # give information for debugging.
> #
> +# All variables that start with 'email' have substitution performed on them.
> +# Patterns like @foo@ are replaced with the contents of the variable foo.
> +# See subst_vars() for the specific keywords available for substitution.
> +#
>
> # ---------------------------- Functions
>
> @@ -190,36 +203,47 @@ generate_email()
> generate_email_footer
> }
>
> +subst_vars()
> +{
> + sep=$(printf '\001')
> + # let this be used in a pipeline or by itself
> + ( [ "$#" -ne 0 ] && echo "$@" || cat ) | sed \
> + -e "s${sep}@change_type@${sep}${change_type}${sep}g" \
> + -e "s${sep}@describe@${sep}${describe}${sep}g" \
> + -e "s${sep}@newrev@${sep}${newrev}${sep}g" \
> + -e "s${sep}@oldrev@${sep}${oldrev}${sep}g" \
> + -e "s${sep}@projectdesc@${sep}${projectdesc}${sep}g" \
> + -e "s${sep}@refname@${sep}${refname}${sep}g" \
> + -e "s${sep}@refname_type@${sep}${refname_type}${sep}g" \
> + -e "s${sep}@oldrev@${sep}${oldrev}${sep}g" \
> + -e "s${sep}@short_refname@${sep}${short_refname}${sep}g"
> +}
> +
> generate_email_header()
> {
> # --- Email (all stdout will be the email)
> # Generate header
> + (
> cat <<-EOF
> To: $recipients
> - Subject: ${emailprefix}$projectdesc $refname_type, $short_refname, ${change_type}d. $describe
> - X-Git-Refname: $refname
> - X-Git-Reftype: $refname_type
> - X-Git-Oldrev: $oldrev
> - X-Git-Newrev: $newrev
> + Subject: ${emailprefix}${emailsubject}
> + X-Git-Refname: @refname@
> + X-Git-Reftype: @refname_type@
> + X-Git-Oldrev: @oldrev@
> + X-Git-Newrev: @newrev@
> + EOF
>
> - This is an automated email from the git hooks/post-receive script. It was
> - generated because a ref change was pushed to the repository containing
> - the project "$projectdesc".
> + if [ -n "${emailbodyintro}" ] ; then
Since the script ensures there's always a value set for emailbodyintro, why
check for it here? None of the other uses of the new config items
(emailsubject and emailfooter) have this kind of check.
> + printf '\n%s\n' "${emailbodyintro}"
> + fi
>
> - The $refname_type, $short_refname has been ${change_type}d
> - EOF
> + printf '\n%s\n' "The @refname_type@, @short_refname@ has been @change_type@d"
> + ) | subst_vars
Any reason why that last printf'd line shouldn't be made part of the
emailbodyintro?
So, overall, why not make generate_email_header() be simply:
generate_email_header()
{
# --- Email (all stdout will be the email)
# Generate header
subst_vars <<-EOF
To: $recipients
Subject: ${emailprefix}${emailsubject}
X-Git-Refname: @refname@
X-Git-Reftype: @refname_type@
X-Git-Oldrev: @oldrev@
X-Git-Newrev: @newrev@
${emailbodyintro}
EOF
}
This would also let you simply subst_vars() so that it needn't support piped
invocations, no? (Not a very drastic simplification, but still...)
M.
> }
>
> generate_email_footer()
> {
> - SPACE=" "
> - cat <<-EOF
> -
> -
> - hooks/post-receive
> - --${SPACE}
> - $projectdesc
> - EOF
> + subst_vars "${emailfooter}"
> }
>
> # --------------- Branches
> @@ -671,6 +695,22 @@ recipients=$(git config hooks.mailinglist)
> announcerecipients=$(git config hooks.announcelist)
> envelopesender=$(git config hooks.envelopesender)
> emailprefix=$(git config hooks.emailprefix || echo '[SCM] ')
> +emailsubject=$(git config hooks.emailsubject || \
> + echo '@projectdesc@ @refname_type@, @short_refname@, @change_type@d. @describe@')
> +emailbodyintro=$(git config hooks.emailbodyintro || cat <<-EOF
> + This is an automated email from the git hooks/post-receive script. It was
> + generated because a ref change was pushed to the repository containing
> + the project "@projectdesc@".
> + EOF
> +)
> +emailfooter=$(git config hooks.emailfooter || SPACE=" " cat <<-EOF
> +
> +
> + hooks/post-receive
> + --${SPACE}
> + @projectdesc@
> + EOF
> +)
> custom_showrev=$(git config hooks.showrev)
>
> # --- Main loop
next prev parent reply other threads:[~2010-01-21 17:09 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-19 5:12 [PATCH] post-receive-email: allow customizing of subject/intro/footer Mike Frysinger
2010-01-21 17:02 ` Marc Branchaud [this message]
2010-01-21 17:59 ` Mike Frysinger
2010-01-21 18:18 ` Marc Branchaud
2010-01-21 20:09 ` Junio C Hamano
-- strict thread matches above, loose matches on Subject: below --
2009-08-23 3:51 Mike Frysinger
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=4B5888C2.60508@xiplink.com \
--to=marcnarc@xiplink.com \
--cc=git@vger.kernel.org \
--cc=vapier@gentoo.org \
/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).