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.
