Release 1.3.0
=============

* New options multimailhook.htmlInIntro and multimailhook.htmlInFooter
  now allow using HTML in the introduction and footer of emails (e.g.
  for a more pleasant formatting or to insert a link to the commit on
  a web interface).

* A new option multimailhook.commitBrowseURL gives a simpler (and less
  flexible) way to add a link to a web interface for commit emails
  than multimailhook.htmlInIntro and multimailhook.htmlInFooter.

* A new public function config.add_config_parameters was added to
  allow custom hooks to set specific Git configuration variables
  without modifying the configuration files. See an example in
  post-receive.example.

* Error handling for SMTP has been improved (we used to print Python
  backtraces for legitimate errors).

* The SMTP mailer can now check TLS certificates when the newly added
  configuration variable multimailhook.smtpCACerts.

* Python 3 portability has been improved.

* The documentation's formatting has been improved.

* The testsuite has been improved (we now use pyflakes to check for
  errors in the code).

This version has been tested with Python 2.4 and 2.6 to 3.5, and Git
v1.7.10-406-gdc801e7, 2.1.4 and 2.8.1.339.g3ad15fd.

No change since 1.3 RC1.

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.
