Release 1.5.0
=============

Backward-incompatible change
----------------------------

The name of classes for environment was misnamed as `*Environement`.
It is now `*Environment`.

New features
------------

* A Thread-Index header is now added to each email sent (except for
  combined emails where it would not make sense), so that MS Outlook
  properly groups messages by threads even though they have a
  different subject line. Unfortunately, even adding this header the
  threading still seems to be unreliable, but it is unclear whether
  this is an issue on our side or on MS Outlook's side (see discussion
  here: https://github.com/git-multimail/git-multimail/pull/194).

* A new variable multimailhook.ExcludeMergeRevisions was added to send
  notification emails only for non-merge commits.

* For gitolite environment, it is now possible to specify the mail map
  in a separate file in addition to gitolite.conf, using the variable
  multimailhook.MailaddressMap.

Internal changes
----------------

* The testsuite now uses GIT_PRINT_SHA1_ELLIPSIS where needed for
  compatibility with recent Git versions. Only tests are affected.

* We don't try to install pyflakes in the continuous integration job
  for old Python versions where it's no longer available.

* Stop using the deprecated cgi.escape in Python 3.

* New flake8 warnings have been fixed.

* Python 3.6 is now tested against on Travis-CI.

* A bunch of lgtm.com warnings have been fixed.

Bug fixes
---------

* SMTPMailer logs in only once now. It used to re-login for each email
  sent which triggered errors for some SMTP servers.

* migrate-mailhook-config was broken by internal refactoring, it
  should now work again.

This version was tested with Python 2.6 to 3.7. It was tested with Git
1.7.10.406.gdc801, 2.15.1 and 2.20.1.98.gecbdaf0.

Release 1.4.0
=============

New features to troubleshoot a git-multimail installation
---------------------------------------------------------

* One can now perform a basic check of git-multimail's setup by
  running the hook with the environment variable
  GIT_MULTIMAIL_CHECK_SETUP set to a non-empty string. See
  doc/troubleshooting.rst for details.

* A new log files system was added. See the multimailhook.logFile,
  multimailhook.errorLogFile and multimailhook.debugLogFile variables.

* git_multimail.py can now be made more verbose using
  multimailhook.verbose.

* A new option --check-ref-filter is now available to help debugging
  the refFilter* options.

Formatting emails
-----------------

* Formatting of emails was made slightly more compact, to reduce the
  odds of having long subject lines truncated or wrapped in short list
  of commits.

* multimailhook.emailPrefix may now use the '%(repo_shortname)s'
  placeholder for the repository's short name.

* A new option multimailhook.subjectMaxLength is available to truncate
  overly long subject lines.

Bug fixes and minor changes
---------------------------

* Options refFilterDoSendRegex and refFilterDontSendRegex were
  essentially broken. They should work now.

* The behavior when both refFilter{Do,Dont}SendRegex and
  refFilter{Exclusion,Inclusion}Regex are set have been slightly
  changed. Exclusion/Inclusion is now strictly stronger than
  DoSend/DontSend.

* The management of precedence when a setting can be computed in
  multiple ways has been considerably refactored and modified.
  multimailhook.from and multimailhook.reponame now have precedence
  over the environment-specific settings ($GL_REPO/$GL_USER for
  gitolite, --stash-user/repo for Stash, --submitter/--project for
  Gerrit).

* The coverage of the testsuite has been considerably improved. All
  configuration variables now appear at least once in the testsuite.

This version was tested with Python 2.6 to 3.5. It also mostly works
with Python 2.4, but there is one known breakage in the testsuite
related to non-ascii characters. It was tested with Git
1.7.10.406.gdc801, 1.8.5.6, 2.1.4, and 2.10.0.rc0.1.g07c9292.

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

* Generate links to commits in combined emails (it was done only for
  commit emails in 1.3.0).

* Fix broken links on PyPi.

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.
