RAT 0.8
=======
 * Some website fixes
 * The Antlib and Maven plugins now provider 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 RATs 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.


