Rat 0.13
=========

New features:
* RAT-228:  Fixing broken Ant unit test setup and making tests run more deterministic. Thanks to Romain Manni-Bucau.
* RAT-245:  Update to latest available and compatible Apache ANT 1.9.12 to get bugfixes and newer JDK support.
* RAT-245:  Update to latest available and compatible Apache ANT 1.9.11 to get bugfixes and newer JDK support.
* RAT-245:  Update to latest available and compatible Apache ANT 1.9.10 due to CVE-2017-5645.
* RAT-243:  Add .checkstyle to Eclipse default exclusions. Thanks to Matthew Ouyang.
* RAT-241:  Reduce default log level of used exclusions to debug, only print totals into the maven log like includes. Thanks to Andrew Gaul.
* RAT-233:  Recognize XML-based .Net Core xproj files. Thanks to Stefan Bodewig.
* RAT-226:  Update to latest available and compatible Apache ANT 1.9.9.

Fixed Bugs:
* RAT-242:  Use UTF-8 as default encoding for RAT Ant reports. Thanks to Matthias Bläsing.
* RAT-234:  Do not treat TypeScript files as binary. Thanks to ajbanck.
* RAT-240:  Overhauled CLI module to allow file based exclusions with wildcards and explicit file names.
* RAT-222:  Download section does not work if SNAPSHOT is deployed, add download of previous RAT release.
* RAT-224:  Fixed example on webpage abozt usage of custom licenses. Thanks to John Patrick.
* RAT-223:  Add support for Golang and Perl module files. Thanks to Eric Friedrich.

Rat 0.12
========

 * We now require Maven 3.0.5+ to build Rat, but as before we only require
   Maven 2.2.1+ if you want to use Rat in your own Maven projects.
 * We've integrated Rat into the ASF Jenkins to ensure continuous builds with various JDK versions.
 * Issues resolved (see https://issues.apache.org/jira):
   Bug
    * [RAT-158] - Fix SAX-Parser warning by explicitly excluding xerces in Doxia 1.2.
                  (thanks to Hervé Boutemy)
    * [RAT-173] - Allow complete skip of RAT plugin with rat.skip property
                  (thanks to Chris Burroughs)
    * [RAT-174] - CDDL1License still very slow, replace Pattern matching with simple String comparison
                  (thanks to Chris Burroughs)
    * [RAT-175] - SourceCodeManagementSystems.hasIgnoreFile() should return boolean
    * [RAT-177] - final arrays should be private
    * [RAT-188] - Fix problems with AnimalSniffer-plugin when running in GUMP with Java 8.
                  Workaround for https://jira.codehaus.org/browse/MANIMALSNIFFER-45
                  (thanks to Mark Thomas)
    * [RAT-160] - Ignore build.log that is created by maven-invoker-plugin runs. Temporary fix until invoker plugin improves
                  configurability of that file.
                  (thanks to Christopher Tubbs)
    * [RAT-179] - Maven plugin and Ant task do not support adding extra approved licenses.
    * [RAT-180] - Generify and beautify texts in RAT report.

   New features
    * [RAT-171] - Maven plugin allows scanning of source code management ignore files. Their contents is added as exclusion to be ignored during RAT runs.
                  Supported source code management systems are: SVN, Git, Bazaar, Mercurial and CVS.
                  An ignore-file's contents is taken as it is without parsing or validating.

   Improvement
    * [RAT-196] - Minor refactoring in pom.xml.
                  (thanks to Karl Heinz Marbaise)
    * [RAT-194] - Upgrade to Doxia 1.6 if called directly, does not affect problems reported in RAT-158. Minor improvements.
                  (thanks to Hervé Boutemy)
    * [RAT-61]  - List files with unapproved licenses in Maven output
    * [RAT-170] - RAT should use itself during build and site generation
    * [RAT-181] - BinaryGuesser should treat *.truststore as binary
    * [RAT-184] - Add DEPENDENCIES to the list of ignored files in NoteGuesser.
                  (thanks to Karl Heinz Marbaise)
    * [RAT-185] - .repository folder should be ignored
    * [RAT-186] - BinaryGuesser should recognize PSD files as images
    * [RAT-187] - Add 'SAR', 'HAR', 'WSR' as archives which should be ignored.
                  (thanks to Karl Heinz Marbaise)
    * [RAT-197] - Improve exclusion defaults when working with Maven 3.3.1 (exclude .mvn).
                  (thanks to Karl Heinz Marbaise)
    * [RAT-198] - Upgrade to plexus-utils 3.0.20.
                  (thanks to Karl Heinz Marbaise)
    * [RAT-172] - Exclude technical directories of source code management systems and their ignore files from RAT scans.
                  Enabled for SVN,Git,Mercurial,Bazar and CVS.
    * [RAT-200] - Update to latest ASF parent pom v17.
    * [RAT-201] - BinaryGuesser should treat *.swf as binary.
                  Furthermore BinaryGuesser falls back to UTF-8 encoding in case the encoding given via system property (-Dfile.encoding) was not found.
    * [RAT-202] - Report layout differs between successful RAT checks and existence of unapproved files.
    * [RAT-203] - Using 'license' in README, source code, javadoc, comments and site instead of 'licence'; improve terminology to not confuse RAT consumers.
    * [RAT-204] - Unify resource handling in code and tests, make sure the resources are properly closed. Apply minor refactorings.
    * [RAT-213] - Upgrade to commons-collections 3.2.2.
                  (thanks to Glenn Lewis)

Rat 0.11
========

 * Rat stays at compiler level 1.5 to be more compliant with other Maven plugins,
   fixed build/CI environment to reflect and ensure that.
 * Fixed Javadoc warnings during build, upgraded Maven Plugin Plugin to avoid
   warnings in generated code (https://jira.codehaus.org/browse/MPLUGIN-237)
 * Issues resolved (see https://issues.apache.org/jira):
   Bug
    * [RAT-135] - addLicenseHeaders is missing a space on license header.
    * [RAT-144] - AbstractRatMojo String constant arrays should be private
    * [RAT-148] - LicenseAddingReport#report has useless call to metaData.getData
                  (thanks to Chris A. Mattmann)
    * [RAT-151] - Detect more archive file formats
    * [RAT-152] - Recognize the format for .bsh, .fml and .jsp file types
    * [RAT-153] - Do not add extra empty lines when appending headers for the Apache License
    * [RAT-154] - Indentation of the license header should be decided per family
    * [RAT-155] - Do not add empty first and last lines in the license header for certain families
    * [RAT-156] - Add some symmetry when applying license headers to files with file type specific headers
    * [RAT-159] - Detect OpenOffice documents as being archives
  Improvement
    * [RAT-129] - Add support for CDDL 1.0
    * [RAT-162] - CDDL1License.matches slow with large inputs
                  (thanks to Andrew Gaul)
    * [RAT-164] - Allow skipping execution entirely
    * [RAT-165] - Use a maven defaultGoal for RAT's base pom.xml

Rat 0.10
========
The main change is RAT-138 - Rat 0.9 could run much slower than 0.8 on some input.

 * Simpler binary archive
 * Issues resolved (see https://issues.apache.org/jira):
   * Bugs fixed:
     * [RAT-137] Website shows incorrect Maven goals in some pages
     * [RAT-128] Use the proper name for the Apache License
     * [RAT-138] RAT runs very slowly on some input
     * [RAT-140] OASISLicense allows invalid Copyright line
     * [RAT-139] FullTextMatchingLicense.prune uses inefficient deleteAtChar
     * [RAT-145] Maven plugin should not run in the "verify" phase, but in the "validate" phase
   * Improvements:
     * [RAT-129] Add support for CDDL 1.0
 * Updated dependencies and plugins
 * Fixed up generics and annotations

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 https://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 AL20 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 https://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 https://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 https://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.
