145 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
git-multimail is close to, but not exactly, a plug-in replacement for
 | 
						|
the old Git project script contrib/hooks/post-receive-email.  This
 | 
						|
document describes the differences and explains how to configure
 | 
						|
git-multimail to get behavior closest to that of post-receive-email.
 | 
						|
 | 
						|
If you are in a hurry
 | 
						|
=====================
 | 
						|
 | 
						|
A script called migrate-mailhook-config is included with
 | 
						|
git-multimail.  If you run this script within a Git repository that is
 | 
						|
configured to use post-receive-email, it will convert the
 | 
						|
configuration settings into the approximate equivalent settings for
 | 
						|
git-multimail.  For more information, run
 | 
						|
 | 
						|
    migrate-mailhook-config --help
 | 
						|
 | 
						|
 | 
						|
Configuration differences
 | 
						|
=========================
 | 
						|
 | 
						|
* The names of the config options for git-multimail are in namespace
 | 
						|
  "multimailhook.*" instead of "hooks.*".  (Editorial comment:
 | 
						|
  post-receive-email should never have used such a generic top-level
 | 
						|
  namespace.)
 | 
						|
 | 
						|
* In emails about new annotated tags, post-receive-email includes a
 | 
						|
  shortlog of all changes since the previous annotated tag.  To get
 | 
						|
  this behavior with git-multimail, you need to set
 | 
						|
  multimailhook.announceshortlog to true:
 | 
						|
 | 
						|
      git config multimailhook.announceshortlog true
 | 
						|
 | 
						|
* multimailhook.commitlist -- This is a new configuration variable.
 | 
						|
  Recipients listed here will receive a separate email for each new
 | 
						|
  commit.  However, if this variable is *not* set, it defaults to the
 | 
						|
  value of multimailhook.mailinglist.  Therefore, if you *don't* want
 | 
						|
  the members of multimailhook.mailinglist to receive one email per
 | 
						|
  commit, then set this value to the empty string:
 | 
						|
 | 
						|
      git config multimailhook.commitlist ''
 | 
						|
 | 
						|
* multimailhook.emailprefix -- If this value is not set, then the
 | 
						|
  subjects of generated emails are prefixed with the short name of the
 | 
						|
  repository enclosed in square brackets; e.g., "[myrepo]".
 | 
						|
  post-receive-email defaults to prefix "[SCM]" if this option is not
 | 
						|
  set.  So if you were using the old default and want to retain it
 | 
						|
  (for example, to avoid having to change your email filters), set
 | 
						|
  this variable explicitly to the old value:
 | 
						|
 | 
						|
      git config multimailhook.emailprefix "[SCM]"
 | 
						|
 | 
						|
* The "multimailhook.showrev" configuration option is not supported.
 | 
						|
  Its main use is obsoleted by the one-email-per-commit feature of
 | 
						|
  git-multimail.
 | 
						|
 | 
						|
 | 
						|
Other differences
 | 
						|
=================
 | 
						|
 | 
						|
This section describes other differences in the behavior of
 | 
						|
git-multimail vs. post-receive-email.  For full details, please refer
 | 
						|
to the main README file:
 | 
						|
 | 
						|
* One email per commit.  For each reference change, the script first
 | 
						|
  outputs one email summarizing the reference change (including
 | 
						|
  one-line summaries of the new commits), then it outputs a separate
 | 
						|
  email for each new commit that was introduced, including patches.
 | 
						|
  These one-email-per-commit emails go to the addresses listed in
 | 
						|
  multimailhook.commitlist.  post-receive-email sends only one email
 | 
						|
  for each *reference* that is changed, no matter how many commits
 | 
						|
  were added to the reference.
 | 
						|
 | 
						|
* Better algorithm for detecting new commits.  post-receive-email
 | 
						|
  processes one reference change at a time, which causes it to fail to
 | 
						|
  describe new commits that were included in multiple branches.  For
 | 
						|
  example, if a single push adds the "*" commits in the diagram below,
 | 
						|
  then post-receive-email would never include the details of the two
 | 
						|
  commits that are common to "master" and "branch" in its
 | 
						|
  notifications.
 | 
						|
 | 
						|
      o---o---o---*---*---*    <-- master
 | 
						|
                       \
 | 
						|
                        *---*  <-- branch
 | 
						|
 | 
						|
  git-multimail analyzes all reference modifications to determine
 | 
						|
  which commits were not present before the change, therefore avoiding
 | 
						|
  that error.
 | 
						|
 | 
						|
* In reference change emails, git-multimail tells which commits have
 | 
						|
  been added to the reference vs. are entirely new to the repository,
 | 
						|
  and which commits that have been omitted from the reference
 | 
						|
  vs. entirely discarded from the repository.
 | 
						|
 | 
						|
* The environment in which Git is running can be configured via an
 | 
						|
  "Environment" abstraction.
 | 
						|
 | 
						|
* Built-in support for Gitolite-managed repositories.
 | 
						|
 | 
						|
* Instead of using full SHA1 object names in emails, git-multimail
 | 
						|
  mostly uses abbreviated SHA1s, plus one-line log message summaries
 | 
						|
  where appropriate.
 | 
						|
 | 
						|
* In the schematic diagrams that explain non-fast-forward commits,
 | 
						|
  git-multimail shows the names of the branches involved.
 | 
						|
 | 
						|
* The emails generated by git-multimail include the name of the Git
 | 
						|
  repository that was modified; this is convenient for recipients who
 | 
						|
  are monitoring multiple repositories.
 | 
						|
 | 
						|
* git-multimail allows the email "From" addresses to be configured.
 | 
						|
 | 
						|
* The recipients lists (multimailhook.mailinglist,
 | 
						|
  multimailhook.refchangelist, multimailhook.announcelist, and
 | 
						|
  multimailhook.commitlist) can be comma-separated values and/or
 | 
						|
  multivalued settings in the config file; e.g.,
 | 
						|
 | 
						|
      [multimailhook]
 | 
						|
              mailinglist = mr.brown@example.com, mr.black@example.com
 | 
						|
              announcelist = Him <him@example.com>
 | 
						|
              announcelist = Jim <jim@example.com>
 | 
						|
              announcelist = pop@example.com
 | 
						|
 | 
						|
  This might make it easier to maintain short recipients lists without
 | 
						|
  requiring full-fledged mailing list software.
 | 
						|
 | 
						|
* By default, git-multimail sets email "Reply-To" headers to reply to
 | 
						|
  the pusher (for reference updates) and to the author (for commit
 | 
						|
  notifications).  By default, the pusher's email address is
 | 
						|
  constructed by appending "multimailhook.emaildomain" to the pusher's
 | 
						|
  username.
 | 
						|
 | 
						|
* The generated emails contain a configurable footer.  By default, it
 | 
						|
  lists the name of the administrator who should be contacted to
 | 
						|
  unsubscribe from notification emails.
 | 
						|
 | 
						|
* New option multimailhook.emailmaxlinelength to limit the length of
 | 
						|
  lines in the main part of the email body.  The default limit is 500
 | 
						|
  characters.
 | 
						|
 | 
						|
* New option multimailhook.emailstrictutf8 to ensure that the main
 | 
						|
  part of the email body is valid UTF-8.  Invalid characters are
 | 
						|
  turned into the Unicode replacement character, U+FFFD.  By default
 | 
						|
  this option is turned on.
 | 
						|
 | 
						|
* Written in Python.  Easier to add new features.
 |