<?xml version="1.0" encoding="utf-8"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!DOCTYPE document
[
<!ELEMENT document (properties?, release+)>
<!ELEMENT properties (title)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT release (action*)>
<!ELEMENT action (#PCDATA)>
<!ATTLIST release
          version CDATA #REQUIRED
          date CDATA #REQUIRED
          description CDATA #IMPLIED>
<!ATTLIST action
          issue CDATA #IMPLIED
          type (add|fix|remove|update) #REQUIRED
          breaks-bwc (true|false) #IMPLIED>
]
>
  <document>
    <properties>
      <title>Apache Compress Ant Library</title>
    </properties>

    <release version="1.3" date="unreleased">
      <action type="update" breaks-bwc="true">
        The Apache Compress Antlib now requires Apache Commons
        Compress 1.6 if you want to work with arj or 7z archives.

        In addition XZ for Java 1.4 is required if you want to
        read/write 7z archives using LZMA(2) compression or
        stand-alone LZMA files.
      </action>
      <action type="add">
        Encoding support for dump and cpio archives and filesets.
      </action>
      <action type="add">
        Read-only support for uncompressed arj archives has been added.
      </action>
      <action type="add">
        Read-only support for LZMA standalone compression has been
        added.
      </action>
      <action type="add">
        Support for file based 7z archives has been added.
      </action>
    </release>

    <release version="1.2" date="2012-04-20">
      <action type="update" breaks-bwc="true">
        The Apache Compress Antlib now requires Apache Commons
        Compress 1.4 and the public domain XZ for Java library if you
        want to use the XZ format.

        Commons Compress 1.4 is also required for the GNU, STAR and
        PAX formats of the tar task.
      </action>
      <action type="add">
        Support for xz compression has been added.
      </action>
      <action type="add">
        The gunzip and bunzip2 tasks as well as the corresponding
        resources now support uncompressing resources that contain
        multiple concatenated streams as a single stream.  This
        behavior has to be enabled explicitly via the
        decompressConcatenated attribute.
      </action>
      <action type="add">
        The tar task now supports the POSIX 1003.1/PAX way of storing
        long file names used by most modern tar implementations.
      </action>
      <action type="add">
        The tar resources and the untar task read entries bigger than
        8 GByte transparently now, if you use Commons Compress 1.4.
      </action>
      <action type="add">
        The tar task writes entries bigger than 8 GByte using POSIX
        1003.1/PAX headers or the star extension if you set the format
        attribute to "star", "gnu" or "pax".  See the tar task's
        documentation of details.
      </action>
      <action type="add" breaks-bwc="true">
        The tar and untar tasks as well as the tar related resources
        now allow the encoding for file names to be specified.  The
        default is the platform's native encoding, it used to be
        ISO-8859-1 in Commons Compress 1.3 and thus the Compress
        Antlib 1.1.
      </action>
    </release>

    <release version="1.1" date="2011-11-05">
      <action type="update" breaks-bwc="true">
        The Apache Compress Antlib now requires Apache Commons
        Compress 1.3 which in turn requires Java5 at runtime.
        This change allows the Compress Antlib to support Zip64
        extensions.
      </action>
      <action type="add">
        Support for pack200 compression has been added.
      </action>
      <action type="add">
        The new pack200normalize task allows you to prepare JAR
        archives so they can be signed and compressed with pack200 and
        the signature will still be valid after uncompressing them
        again.
      </action>
      <action type="add">
        Read-only support for the Unix dump format has been added in
        the form of an &lt;undump&gt; task and corresponding
        &lt;dumpentry&gt; and &lt;dumpfileset&gt; resources.
      </action>
      <action type="update">
        A new attribute zip64Mode provides finer grained control over
        whether Zip64 extensions will be used in the &lt;zip&gt; task.
      </action>
      <action type="update">
        The &lt;zip&gt; task has a new attribute zip64Mode that
        controls whether Zip64 extended information is written to the
        archive.
      </action>
      <action type="update">
        The &lt;ar&gt; task now optionally suppports writing entries
        with names longer than 16 characters using the BSD variant of
        AR archives.
      </action>
      <action type="add">
        The unarchiving tasks and fileset types share a new attribute
        skipUnreadableEntries that can be used to ignore archive
        entries that Apache Commons Compress knows it cannot handle
        (like encrypted ZIP entries or sparse files in GNU tar
        archives).
      </action>
      <action type="update">
        The preserveLeadingSlashes attribute of the &lt;tar&gt; task
        now works as expected.
      </action>
    </release>
  </document>
