Release 1.2.0
=============

* It is now possible to exclude some refs (e.g. exclude some branches
  or tags). See refFilterDoSendRegex, refFilterDontSendRegex,
  refFilterInclusionRegex and refFilterExclusionRegex.

* New commitEmailFormat option which can be set to "html" to generate
  simple colorized diffs using HTML for the commit emails.

* git-multimail can now be ran as a Gerrit ref-updated hook, or from
  Atlassian BitBucket Server (formerly known as Atlassian Stash).

* The From: field is now more customizeable. It can be set
  independently for refchange emails and commit emails (see
  fromCommit, fromRefChange). The special values pusher and author can
  be used in these configuration variable.

* A new command-line option, --version, was added. The version is also
  available in the X-Git-Multimail-Version header of sent emails.

* Set X-Git-NotificationType header to differentiate the various types
  of notifications. Current values are: diff, ref_changed_plus_diff,
  ref_changed.

* Preliminary support for Python 3. The testsuite passes with Python 3,
  but it has not received as much testing as the Python 2 version yet.

* Several encoding-related fixes. UTF-8 characters work in more
  situations (but non-ascii characters in email address are still not
  supported).

* The testsuite and its documentation has been greatly improved.

Plus all the bugfixes from version 1.1.1.

This version has been tested with Python 2.4 and 2.6 to 3.5, and Git
v1.7.10-406-gdc801e7, git-1.8.2.3 and 2.6.0. Git versions prior to
v1.7.10-406-gdc801e7 probably work, but cannot run the testsuite
properly.

Release 1.1.1 (bugfix-only release)
===================================

* The SMTP mailer was not working with Python 2.4.

Release 1.1.0
=============

* When a single commit is pushed, omit the reference changed email.
  Set multimailhook.combineWhenSingleCommit to false to disable this
  new feature.

* In gitolite environments, the pusher's email address can be used as
  the From address by creating a specially formatted comment block in
  gitolite.conf (see multimailhook.from in README).

* Support for SMTP authentication and SSL/TLS encryption was added,
  see smtpUser, smtpPass, smtpEncryption in README.

* A new option scanCommitForCc was added to allow git-multimail to
  search the commit message for 'Cc: ...' lines, and add the
  corresponding emails in Cc.

* If $USER is not set, use the variable $USERNAME. This is needed on
  Windows platform to recognize the pusher.

* The emailPrefix variable can now be set to an empty string to remove
  the prefix.

* A short tutorial was added in doc/gitolite.rst to set up
  git-multimail with gitolite.

* The post-receive file was renamed to post-receive.example. It has
  always been an example (the standard way to call git-multimail is to
  call git_multimail.py), but it was unclear to many users.

* A new refchangeShowGraph option was added to make it possible to
  include both a graph and a log in the summary emails.  The options
  to control the graph formatting can be set via the new graphOpts
  option.

* New option --force-send was added to disable new commit detection
  for update hook. One use-case is to run git_multimail.py after
  running "git fetch" to send emails about commits that have just been
  fetched (the detection of new commits was unreliable in this mode).

* The testing infrastructure was considerably improved (continuous
  integration with travis-ci, automatic check of PEP8 and RST syntax,
  many improvements to the test scripts).

This version has been tested with Python 2.4 to 2.7, and Git 1.7.1 to
2.4.

Release 1.0.0
=============

* Fix encoding of non-ASCII email addresses in email headers.

* Fix backwards-compatibility bugs for older Python 2.x versions.

* Fix a backwards-compatibility bug for Git 1.7.1.

* Add an option commitDiffOpts to customize logs for revisions.

* Pass "-oi" to sendmail by default to prevent premature termination
  on a line containing only ".".

* Stagger email "Date:" values in an attempt to help mail clients
  thread the emails in the right order.

* If a mailing list setting is missing, just skip sending the
  corresponding email (with a warning) instead of failing.

* Add a X-Git-Host header that can be used for email filtering.

* Allow the sender's fully-qualified domain name to be configured.

* Minor documentation improvements.

* Add this CHANGES file.


Release 0.9.0
=============

* Initial release.
