<?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.2" date="unreleased">
      <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>
