Rat 0.9
=======
 * Improved documentation
 * Rat now requires Java5 at runtime
 * The Antlib contains a new matcher type that allows matching on the
   full text of the license rather than a single line.
 * Support automatic addition of license headers to svg files.
 * Issues Resolved (see http://issues.apache.org/jira):
   * Bugs Fixed:
     * [RAT-3]   - Incorrect alignment of file contents
     * [RAT-102] - typo in pom.xml / field description
     * [RAT-109] - Return value of mkdirs() is not checked
                   and no error handling occurs
     * [RAT-116] - Docs don't say what the default excludes are
     * [RAT-120] - fix some maven warning and upgrade some
                   dependencies.
     * [RAT-121] - use maven java5 annotations for maven plugins
     * [RAT-122] - Maven Plugin: field to ignore errors and continue
                   the build
     * [RAT-124] - Rat plugin should exclude the configuration directory
                   used by IDEA
     * [RAT-126] - Default excludes do not ignore .git/ repository
   * Improvements:
     * [RAT-13]  - [GOOGLE-14] GNU License support
     * [RAT-49]  - Recognise MIT LIcense
     * [RAT-104] - Using jUnit4 annotation based tests instead of
                   junit3 - migration from junit 3.8.2 to current
                   junit 4.10
     * [RAT-106] - Minor Javadoc errors fixed in 3 files
     * [RAT-108] - Add native support for thrift generated code to be
                   ignored
     * [RAT-111] - RAT does not ignore javah generated files
     * [RAT-125] - Support applied ASL20 license headers, including
                   checking for required copyright header line
   * New Features
     * [RAT-78]  - Support doxia 1.1.2
   * Tasks
     * [RAT-59]  - Upgrade To Java 1.5
     * [RAT-119] - Upgrade Maven prerequisite to 2.2.1

Rat 0.8
=======
 * Some website fixes
 * The Antlib and Maven plugins now provide simpler ways to detect
   licenses not directly supported by Rat.
 * Issues Resolved (see http://issues.apache.org/jira):
  * Bug:
    * RAT-86 CLI doesn't allow adding of licenses unless a custom
      stylesheet has been specified
    * RAT-87 Tests could leave temporary files around.
    * RAT-92 When adding licenses Rat used \n instead of the platform
      dependent line--end character(s)
    * RAT-94 Streams were not always closed immediately when adding
      licenses.
  * Improvement:
    * RAT-79 Support automatic addition of license headers to Velocity
      templates
    * RAT-83 Support automatic addition of license headers to Scala
      source files
    * RAT-84 Support automatic addition of license headers to Ruby
      source files
    * RAT-89 Support automatic addition of license headers to Perl,
      TCL, C++, C# and PHP source files
    * RAT-91 Support automatic addition of license headers to Groovy
      source files
    * RAT-85 Allow --addLicense as an alias for --addLicence for
      people used to the US spelling.
    * RAT-34 --addLicense will add the license to the top of Java
      files without a package line or XML files without an XML
      declaration now - it used to not add anything.
    * RAT-67 The XML and standard plain text reports now contain a
      timestamp with the time the report has been generated.
    * RAT-95 When adding licenses Rat will now remove any BOM from the file.
    * RAT-93 --addLicense now supports more .NET specific files like
      MS Visual Studio project and solution files
    * RAT-99 The command line interface has a new option that
      specifies a file containing regular expressions for files to exclude

Rat 0.7
=======
 * Some website fixes
 * Issues Resolved (see http://issues.apache.org/jira):
  * Bug:
    * RAT-62 Some of Rat's own files missing License Headers
    * RAT-63 ant-task-examples.xml has an wrong uri in the -typedef ant target
    * RAT-70 Missing closing html tag in generated report by
  * Improvement:
    * RAT-17 Support the use of archives as input
    * RAT-30 / RAT-76 Support automatic addition of license headers
    * RAT-52 Merge In Rat Output Semantics
    * RAT-56 Commons IO Wildcard Excludes
    * RAT-65 Rat Pom cleanup
    * RAT-68 Add support for Python, C, & script files (.bat & .sh)
    * RAT-72 Keep version in plugins sample doc up to date
    * RAT-73 / RAT-74 Support for XML output in Ant task and Maven Plugin
    * RAT-74 / RAT-75 Support for custom XSLT stylesheets

Rat 0.6
===========
 * Support for TMF header
 * Comprehend PEM, CRL file endings
 * Added reporting capability to recursive rat script
 * Moved to the Incubator@Apache
 * Issues Resolved (see http://issues.apache.org/jira):
  * Bug:
    * RAT-3 Incorrect alignment of file contents
    * RAT-11 Incorrect number of unnapproved licences reported
    * RAT-12 Incorrect SCM info in maven plugin pom
    * RAT-29 NPE on &quot;mvn install&quot; in rat-anttasks
    * RAT-33 Mailing list subscribe points to unsubscribe
    * RAT-34 No license header added for java files that do not contain project line
    * RAT-35 Incorrect number of unapproved licenses reported by rat:check
    * RAT-36 Report header incorrectly refers to an &quot;L&quot; license marker
  * Improvement:
    * RAT-8 [PATCH] add JavaCC to GeneratedLicenseNotRequired
    * RAT-9 A more informative website
    * RAT-10 A few Javadoc comments
    * RAT-23  More details in text summary
    * RAT-24 Include checksums on web page
    * RAT-26 Improve web summary
    * RAT-27 Index page
    * RAT-37 List all resources with unapproved licenses at the beginning of the report
  * New Feature
    * RAT-6 RAT Source Import
  * Task
    * RAT-28 Repackage maven plugin
  * Wish
    * RAT-1 maven-rat-plugin and ant-rat tasks

Rat 0.5.1
=========
 * Fixed file closing bug
 * Fixed XML bad character bug

Rat 0.5
=======
 * Added header matcher for DoJo.
 * Refactoring existing codebase to separate concerns and use
   resource pipeline.
 * New header matching library.

Rat 0.4.1
=========
Rat 0.4.1 is the first release with distributions. The release was cut
for this purpose.

Rat 0.4.1 Notes
===============
 * Created POM for use with Rat library.
 * Ant task switched to use Xml based report.

Rat 0.4 Notes
=============
 * Ant tasks added. These allow Rat reports to be run against a wide variety
   of resources from within Ant.
 * Legacy report is now deprecated. It will be removed before the next release.
 * Created stylesheet for xml reports which produce output similar to the legacy
   plain text report. Application now uses the xml report with that stylesheet.
 * Revised xml output format
 * Improve support for binary recognition by adding code that tastes files

Rat 0.3 Notes
=============
 * This is the last release with the original hacked together plain test report.
   The new XML reporting code is present but is not yet the default.
 * Rat 0.3 is the first release with release notes. All previous releases are
   now consigned to Ancient History. No record of them will be found here.


