<?xml version="1.0"?>
<!--
   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.
-->
<!--
This file is also used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the
release process easy :-).

2.  Do a JIRA search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
SVN commits. Set the project.properties' maven.changelog.range
property to the number of days since the last release.

To generate the release notes from this file:

mvn -N changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

then tweak the formatting if necessary
and commit

The <action> type attribute can be add,update,fix,remove.
-->

<document xmlns="http://maven.apache.org/changes/1.0.0">
  <properties>
    <title>Apache Commons VFS Release Notes</title>
    <author email="dev@commons.apache.org">Apache Commons Developers</author>
  </properties>

  <body>
    <release version="2.9.0" date="2021-MM-DD" description="Maintenance release. Requires Java 8.">
      <!-- ADDS -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Add and use FileOperationProvider.EMPTY_ARRAY.
      </action>      
      <!-- FIXES -->
      <action type="fix" dev="ggregory" due-to="Boris Petrov">
        VFS.close(): Set `instance` to `null` after closing it; #163.
      </action>
      <action type="fix" dev="ggregory" due-to="Boris Petrov">
        Fix closing the files cache after warning that not all components have been closed; #165.
      </action>
      <action type="fix" dev="ggregory" due-to="Boris Petrov, Gary Gregory, Max Kellermann">
        Fix NPE when closing a stream from a different thread #167. See also #166.
      </action>
      <action type="fix" dev="ggregory" issue="VFS-798" due-to="XenoAmess, Gary Gregory">
        IllegalArgumentException: Bad escape for Chinese characters in FileObject path #168.
      </action>
      <!-- UPDATES  -->
      <action type="update" dev="ggregory" due-to="Arturo Bernal">
        Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #164.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update Log4j 2.14.0 -> 2.14.1.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update Maven Surefire from 2.19.1 to 3.0.0-M5.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Port internal embedded HTTP asynchronous file server used in tests from  from Apache HttpComponents HttpCore/HttpClient 4.x to 5.0.x.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Only use reflection VFS.createFileSystemManager(String) if the FileSystemManager is not a subclass of AbstractFileSystem.
      </action>
      <action type="update" dev="ggregory" due-to="Arturo Bernal">
        Simplify if conditions #170.
      </action>
      <action type="update" dev="ggregory" due-to="Arturo Bernal">
        Redundant local variable #171.
      </action>
      <action type="update" issue="VFS-804" dev="ggregory" due-to="Arturo Bernal">
        Fix and Refine Javadoc #174.
      </action>
      <action dev="ggregory" type="update">
        Update net.sourceforge.pmd:pmd-* -> 6.32.0 -> 6.33.0.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump checkstyle from 8.41 to 8.41.1 #175.
      </action>
      <action dev="ggregory" due-to="Boris Petrov" type="update">
        Update `actions/setup-java` to v2 #177.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump mockito-core from 3.8.0 to 3.9.0 #178.
      </action>
    </release>
    <release version="2.8.0" date="2021-03-06" description="Feature and maintenance release. Requires Java 8.">
<!--       <action issue="VFS-443" dev="ggregory" type="update" due-to="nickallen"> -->
<!--        [Local] Need an easy way to convert from a FileObject to a File. -->
<!--       </action> -->
<!-- START Might need to be moved to the next version -->
      <!-- FIXES -->
      <action issue="VFS-783" dev="ggregory" due-to="satish-csi, Michael Osipov, Woonsan Ko, Gary Gregory" type="fix">
        Based on WEBDAV4 vs. WEBDAV4S set back-end http scheme #118.
      </action>
      <action issue="VFS-783" dev="ggregory" due-to="satish-csi, Woonsan Ko, Gary Gregory" type="fix">
        Proper http scheme setting on webdav/webdav2 with unit tests #143.
      </action>
      <action issue="VFS-783" dev="ggregory" due-to="Gary Gregory" type="fix">
        [SFTP] SftpFileSystem.executeCommand() should use UTF-8 instead of the platform default.
      </action>
      <action dev="ggregory" due-to="Max Kellermann" type="fix">
        FileContentThreadData: lazy ArrayList initialization to save memory #155.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        Fix possible ClassCastException in DefaultFileSystemManager.freeUnusedResources().
      </action>
      <action issue="VFS-748" dev="ggregory" due-to="PeterAlfredLee, Gary Gregory" type="fix">
        TarProvider Incorrectly marks file IMAGINARY after garbage collection with WeakRefFilesCache, #97.
      </action>
      <action issue="VFS-794" dev="ggregory" due-to="Gary Gregory" type="fix">
        Fix file resource leak in CombinedResources (properties file) which keeps the Commons VFS jar file open.
      </action>
      <action dev="ggregory" due-to="Max Kellermann, Bruno P. Kinoshita, Gary Gregory" type="fix">
        Rework SoftRefFilesCache locking part 1 #158.
      </action>
      <action issue="VFS-785" dev="ggregory" due-to="satish bhor, Michael Osipov, Gary Gregory" type="fix">
        [HTTP4][HTTP5] Credentials conflict when root and proxy hosts are same name but different ports, #120.
      </action>
      <action dev="ggregory" due-to="Max Kellermann, Gary Gregory, Florent Guillaume, Bruno P. Kinoshita, Bernd" type="fix">
        Rework SoftRefFilesCache locking #154.
      </action>
      <action issue="VFS-782" dev="ggregory" due-to="satish-csi, Gary Gregory" type="fix">
        Pass correct proxy authentication credentials #117.
      </action>
      <!-- ADDS -->
      <action dev="ggregory" due-to="Boris Petrov, Gary Gregory" type="add">
        Add ability to remove a provider from DefaultFileSystemManager #149.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add and use VFS.close().
      </action>
      <action dev="ggregory" due-to="Gary Gregory, xiaqingyun" type="add">
        [FTP] Add support for ControlKeepAliveReplyTimeout and ControlKeepAliveTimeout.
      </action>
      <action dev="ggregory" due-to="Gary Gregory, Michael Graham" type="add">
        [FTP] Tests can be configured with a custom FTP server command factory.
      </action>
      <action issue="VFS-257" dev="ggregory" due-to="Andrew Franklin, Michael Graham, Gary Gregory" type="add">
        [FTP] Add support for MDTM to get more accurate last modified times.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.setDataTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.getConnectTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.getDataTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP] Add HttpFileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP] Add HttpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP] Add HttpFileSystemConfigBuilder.getConnectionTimeout(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP] Add HttpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [SFTP] Add SftpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [SFTP] Add SftpFileSystemConfigBuilder.setSessionTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [SFTP] Add SftpFileSystemConfigBuilder.getConnectTimeout(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [SFTP] Add SftpFileSystemConfigBuilder.getSessionTimeout(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP4] Add Http4FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP4] Add Http4FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP4] Add Http4FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP4] Add Http4FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP5] Add Http5FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP5] Add Http5FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP5] Add Http5FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP5] Add Http5FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="PMD, Gary Gregory" type="add">
        Add AbstractFileSystem.AbstractFileSystem() for Serializable subclasses (PMD).
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" due-to="PeterAlfredLee" type="update">
        Modify some code use for-each loop and stream API #142.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="update">
        Simplify some String tests in method Os#determineOsFamily #147.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.mockito:mockito-core 3.5.13 -> 3.8.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.apache.jackrabbit:jackrabbit-* 2.21.3 -> 2.21.5.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump actions/checkout from v2.3.3 to v2.3.4 #144.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update tests from Log4j 2.13.3 to 2.14.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update com.puppycrawl.tools:checkstyle 8.36.2 -> 8.41.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update maven-checkstyle-plugin 3.1.1 -> 3.1.2.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.apache.httpcomponents:httpcore-nio 4.4.13 -> 4.4.14.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee, Gary Gregory" type="update">
        Modify some calls of method Collection.toArray #145.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons.japicmp.version 0.14.3 -> 0.15.3.
      </action>
      <action dev="ggregory" due-to="Arturo Bernal" type="update">
        Minor Improvements, #152, #156, #160.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons.spotbugs.version 4.1.4 -> 4.2.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons.spotbugs.impl.version 4.1.3 -> 4.2.0.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump actions/cache from v2 to v2.1.4 #159.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons-net:commons-net 3.7.2-> 3.8.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update junit 4.13.1 -> 4.13.2.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update maven-pmd-plugin 3.13.0 -> 3.14.0.
      </action>
      <action issue="VFS-795" dev="kinow" due-to="Max Kellermann" type="update">
        Code improvements for SoftRefFilesCache (simplify loop, use isEmpty, ...).
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons-lang3 3.11 -> 3.12.0.
      </action>
    </release>
    <release version="2.7.0" date="2020-10-26" description="Feature and maintenance release. Requires Java 8.">
      <action issue="VFS-753" dev="ggregory" due-to="John Webb, Gary Gregory" type="fix">
        NumberFormatException in SftpFileSystem::getUId.
      </action>
      <action issue="VFS-779" dev="ggregory" due-to="Gary Gregory" type="fix">
        Possible null pointer dereference in org.apache.commons.vfs2.impl.DefaultFileReplicator.close() due to return value of called method.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.isDisableDetectExecChannel(FileSystemOptions) and setDisableDetectExecChannel(FileSystemOptions, boolean).
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add org.apache.commons.vfs2.FileSystemConfigBuilder.toBooleanObject(boolean).
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        org.apache.commons.vfs2.provider.VfsComponent now implements java.io.Closeable.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Modify some loop using stream API #96.
      </action>
      <action issue="VFS-757" dev="ggregory" due-to="ddg-igh" type="add">
        [SFTP] Configure whether exec detection is enabled #80.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="add">
        Add proxy config for some HTTP/HTTPS test #108.
      </action>
      <action issue="VFS-780" dev="ggregory" due-to="Wuchte" type="fix">
        SftpFileSystem returns null channel and produce NPE - fix get… #110.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="add">
        Fix some test error when JVM's default language is not US en #107.
      </action>
      <action issue="VFS-788" dev="ggregory" due-to="satish bhor" type="fix">
        [webdav/webdav4] Jackrabbit1 and jackrabbit2 modules getting same OSGi symbolic name.
      </action>
      <action issue="VFS-787" dev="ggregory" due-to="satish bhor" type="add">
        Allow users to set proxy schemes like http/https #122.
      </action>
      <action issue="VFS-786" dev="ggregory" due-to="satish bhor" type="add">
        Allow users to set custom keystore types like JCEKS, PKCS12 #121.
      </action>
      <action issue="VFS-624" dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Fix for read() in constructors of LocalFileRandomAccessContent and RamFileRandomAccessContent #93.
      </action>
      <action issue="VFS-769" dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Fix .tgz and .tbz2 createFileSystem fails #94
      </action>
      <action issue="VFS-664" dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Fix for file names with exclamation mark can not be read #95.
      </action>
      <action issue="VFS-777" dev="ggregory" due-to="Bing-ok, Gary Gregory" type="fix">
        NoSuchMethodError due to multiple versions of commons-codec:commons-codec:jar.
      </action>
      <action issue="VFS-570" dev="ggregory" due-to="garpinc, Gary Gregory" type="add">
        Add HDFS write support #114.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        Remove workaround for JDK BUG: 6192331 which was fixed way back in Java 6: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6192331
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        FileObject.getURL() returns an illegal URL when a it should escape a space.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add FileObject.getURI().
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add FileObject.getPath().
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Fix test fail caused by lack proxy configuration for machines behind a proxy #139.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Modify some code use try-with-resources #138.
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" due-to="PeterAlfredLee" type="update">
        Update some file from CRLF to LF #141.
      </action>
      <!-- UPDATES -->
      <action issue="VFS-755" dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.apache.httpcomponents:httpclient from 4.5.10 to 4.5.11.
      </action>
      <action issue="VFS-756" dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.apache.jackrabbit:jackrabbit-standalone-components from 2.19.6 to 2.21.3.
      </action>
      <action issue="VFS-754" dev="ggregory" due-to="Gary Gregory" type="update">
        Update Apache Commons Compress from 1.19 to 1.20.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update tests from Apache Commons Lang 3.9 to 3.11.
      </action>
      <action issue="VFS-768" dev="ggregory" due-to="ddg-igh, Gary Gregory" type="add">
        Update Apache httpclient 4.5.11 to 4.5.13 and httpclient5 5.0-beta7 to 5.0.3.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update tests from Log4j 2.13.0 to 2.13.3.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
        Update tests from org.mockito:mockito-core from 3.2.4 to 3.5.13, #131.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update Apache Commons IO from 2.6 to 2.8.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update site reports from org.apache.bcel:bcel 6.4.1 to 6.5.0.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/checkout from v1 to v2.3.3 #100, #109, #130.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/setup-java from v1.4.0 to v1.4.3 #111, #113, #133.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update commons-parent from 50 to 52.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update checkstyle from 8.27 to 8.36.2 #123, #132.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update maven-pmd-plugin from 3.12.0 to 3.13.0 #125.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update exec-maven-plugin from 1.6.0 to 3.0.0 #127.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update com.puppycrawl.tools:checkstyle 8.36 -> 8.36.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Net from 3.6 to 3.7.2.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update JUnit from 4.13 to 4.13.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update FindBugs to SpotBugs 4.1.3.
      </action>
    </release>
    <release version="2.6.0" date="2020-01-06" description="Feature and maintenance release.">
      <action dev="ggregory" due-to="Eitan Adler" type="fix">
        Clean up tests and simplify assertions #76.
      </action>
      <action issue="VFS-750" dev="ggregory" due-to="Boris Petrov, Gary Gregory" type="fix">
        Fix backwards incompatibility in AbstractFileObject.getInputStream().
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update JUnit from 4.12 to 4.13.
      </action>
      <action issue="VFS-751" dev="ggregory" due-to="Gary Gregory" type="fix">
        Deprecate org.apache.commons.vfs2.FileUtil for org.apache.commons.vfs2.util.FileObjectUtils.
      </action>
    </release>
    <release version="2.5.0" date="2019-12-24" description="Feature and maintenance release.">
      <action issue="VFS-741" dev="ecki" type="fix">
        FileObject#getChildren allows listing of files with known scheme prefix (generalizes VFS-398).
      </action>
      <action issue="VFS-726" dev="ggregory" type="fix" due-to="Cornelius Höfig, Gary Gregory">
        getInputStream(int bufferSize) on SftpFileObject effectively ignores buffer size.
      </action>
      <action issue="VFS-704" dev="ggregory" type="fix" due-to="Boris Petrov, Gary Gregory">
        Some providers wrap their input/output streams twice in a BufferedInputStream.
      </action>
      <action issue="VFS-727" dev="ggregory" type="fix" due-to="Michiel Hendriks, Gary Gregory">
        Prevented creation of singleton file system manager from providers.
      </action>
      <action issue="VFS-444" dev="ggregory" type="fix" due-to="Walter Eaves, Xavier Dury, Michiel Hendriks, Gary Gregory">
        ResourceFileProvider "res://" failed to obtain FileObject from resolved FileName.
      </action>
      <action issue="VFS-728" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Compress from 1.18 to 1.19.
      </action>
      <action issue="VFS-729" dev="ggregory" type="update" due-to="Michiel Hendriks, Gary Gregory">
        Upgrade Hadoop to 2.7.4 or later; will use current 3.2.0.
      </action>
      <action issue="VFS-731" dev="ggregory" type="update" due-to="Gary Gregory">
        Update org.apache.httpcomponents:httpclient from 4.5.9 to 4.5.10.
      </action>
      <action issue="VFS-732" dev="ggregory" type="update" due-to="Gary Gregory">
        Update org.apache.httpcomponents:httpcore-nio from 4.4.11 to 4.4.12.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests using org.mockito:mockito-core from 3.0.0 to 3.1.0.
      </action>
      <action issue="VFS-734" dev="ggregory" type="add" due-to="Gary Gregory">
        Add functional interface org.apache.commons.vfs2.function.VfsConsumer.
      </action>
      <action issue="VFS-735" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.FileSystemManager.close() via AutoCloseable.
      </action>
      <action issue="VFS-736" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.VFS.reset().
      </action>
      <action issue="VFS-737" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Hadoop from 3.2.0 to 3.2.1.
      </action>
      <action issue="VFS-733" dev="ggregory" type="fix" due-to="Falco, Gary Gregory, Bruno P. Kinoshita">
        Parent layer of ZipFileSystem set to null through OnCallRefreshFileObject and DecoratedFileObject.refresh().
      </action>
      <action issue="VFS-738" dev="ggregory" type="add" due-to="Gary Gregory">
        Deprecate org.apache.commons.vfs2.FileChangeEvent.getFile() in favor of getFileObject().
      </action>
      <action issue="VFS-739" dev="ggregory" type="fix" due-to="xia0c, Gary Gregory">
        Changes to parseUri breaks backward compatibility by throwing NullPointerException in some cases.
      </action>
      <action issue="VFS-686" dev="ggregory" type="add" due-to="Woonsan Ko, Gary Gregory">
        Add webdav4 provider based on the latest Jackrabbit 2.x #52.
      </action>
      <action issue="VFS-742" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.FileContent.isEmpty().
      </action>
      <action issue="VFS-743" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.provider.compressed.CompressedFileFileObject.SIZE_UNDEFINED.
      </action>
      <action issue="VFS-744" dev="ggregory" type="fix" due-to="Gary Gregory">
        org.apache.commons.vfs2.FileContent.getByteArray() can throw NegativeArraySizeException for BZip2 files.
      </action>
      <action issue="VFS-687" dev="ggregory" type="add" due-to="Woonsan Ko, Gary Gregory">
        Add http5 and http5s providers (#74)
      </action>
      <action issue="VFS-590" dev="ggregory" type="fix" due-to="L, Alex Pearce, Gary Gregory">
         SFTP moveTo operation might fail on permission checks even if the operation itself might succeed. #75.
      </action>
      <action issue="VFS-617" dev="ggregory" type="fix" due-to="Tim Nickels, Joshua Woods, David Johansson, Bernd Eckenfels, Len, Nim Lhûg, Vineet Tyagi, Gopal Warawate, Alex Pearce, Gary Gregory">
         SFTP isReadable fails if unable to determine group identity. #75.
      </action>
      <action issue="VFS-749" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Parent from 48 to 50.
      </action>
    </release>
    <release version="2.4.1" date="2019-08-10" description="Bug fix release.">
      <action issue="VFS-725" dev="ggregory" type="fix" due-to="Gary Gregory">
        [Local] org.apache.commons.vfs2.FileContent.getLastModifiedTime() is losing milliseconds (always ends in 000).
      </action>
      <action issue="VFS-724" dev="ggregory" type="fix" due-to="William R, Gary Gregory">
        FileContent#getByteArray() throws IllegalArgumentException: Buffer size &lt;= 0 when file size is 0.
      </action>
      <action                 dev="ggregory" type="fix" due-to="Gary Gregory">
        Javadoc fixes.
      </action>
    </release>
    <release version="2.4" date="2019-07-12" description="Feature and maintenance release.">
      <action issue="VFS-690" dev="ggregory" type="add">
        Allow to set key exchange algorithm explicitly. GitHub #32.
      </action>
      <action issue="VFS-692" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Collections from 4.2 to 4.3.
      </action>
      <action issue="VFS-693" dev="ggregory" type="update" due-to="Boris Petrov, Gary Gregory">
        Add support for customizing FTP transfer aborted status codes. GitHub PR #51.
      </action>
      <action issue="VFS-694" dev="ggregory" type="fix" due-to="Boris Petrov">
        Fix inability to start the DefaultFileMonitor after it has been stopped. GitHub PR #55.
      </action>
      <action issue="VFS-696" dev="ggregory" type="fix" due-to="rayzzed">
        SFTP HTTP and SOCKS proxy authentication. GitHub PR #49.
      </action>
      <action issue="VFS-497" dev="ggregory" type="add" due-to="Michael Schnell">
        Ported filters from Commons IO #9.
      </action>
      <action issue="VFS-696" dev="ggregory" type="add" due-to="Robert DeRose">
        More efficient comparison in FileExtensionSelector #44.
      </action>
      <action issue="VFS-660" dev="ggregory" type="add" due-to="Liu Yubao">
        Expose workaround for connecting to FTP server from different subnets in PASV mode #35.
      </action>
      <action issue="VFS-699" dev="ggregory" type="add" due-to="Boris Petrov">
        Add setting for FTP encoding auto-detection #58.
      </action>
      <action issue="VFS-702" dev="ggregory" type="update" due-to="Boris Petrov">
        Simplify adding files to DefaultFileMonitor #57.
      </action>
      <action issue="VFS-703" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Lang from 3.8.1 to 3.9.
      </action>
      <action issue="VFS-706" dev="ggregory" type="add" due-to="Boris Petrov">
        Add ability to specify buffer sizes #59.
      </action>
      <action issue="VFS-609" dev="ggregory" type="add" due-to="stevezhuang, Rostislav, Gary Gregory">
        SFTP provider doesn't support a private key as byte array #60.
      </action>
      <action issue="VFS-707" dev="ggregory" type="add" due-to="Gary Gregory">
        Update Apache HttpClient from 4.5.7 to 4.5.8.
      </action>
      <action issue="VFS-707" dev="ggregory" type="fix" due-to="Gary Gregory">
        [SFTP] SftpFileSystem.executeCommand(String, StringBuilder) can leak ChannelExec objects.
      </action>
      <action issue="VFS-709" dev="ggregory" type="fix" due-to="Gary Gregory">
        [SFTP] SftpFileSystem.getGroupsIds() can initialize underlying data more than once while multithreading.
      </action>
      <action issue="VFS-710" dev="ggregory" type="fix" due-to="Gary Gregory">
        [SFTP] SftpFileSystem.getUid() can initialize underlying data more than once while multithreading.
      </action>
      <action issue="VFS-711" dev="ggregory" type="fix" due-to="Gary Gregory">
        [SFTP] SftpFileSystem can initialize underlying Session more than once while multithreading.
      </action>
      <action issue="VFS-662" dev="ggregory" type="fix" due-to="qxo, Alexey Abashev, Gary Gregory">
        [SFTP] SftpFileSystem has Thread-safe issue about idleChannel (#36).
      </action>
      <action issue="VFS-700" dev="ggregory" type="fix" due-to="Gary Gregory, Matthias Krueger">
        Some tests fail on Java 11 and above.
      </action>
      <action issue="VFS-712" dev="ggregory" type="add" due-to="Gary Gregory">
        Add null-safe org.apache.commons.vfs2.util.FileObjectUtils.exists(FileObject).
      </action>
      <action issue="VFS-713" dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileObjectUtils.readProperties(FileObject) method to read a .properties file.
      </action>
      <action issue="VFS-715" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.FileContent.getByteArray().
      </action>
      <action issue="VFS-716" dev="ggregory" type="fix" due-to="Boris Petrov">
        Fix AbstractFileName.getURI returning unencoded #-sign #64.
      </action>
      <action issue="VFS-698" dev="ggregory" type="fix" due-to="David Septimus, Bernd">
        SFTP file attributes are fetched multiple times leading to very slow directory listing; #65.
      </action>
      <action issue="VFS-717" dev="ggregory" type="fix" due-to="Gary Gregory">
        Update org.apache.httpcomponents:httpclient from 4.5.8 to 4.5.9.
      </action>
      <action issue="VFS-718" dev="ggregory" type="fix" due-to="Boris Petrov">
        MonitorInputStream should not close the stream in "read" #67.
      </action>
      <action issue="VFS-719" dev="ggregory" type="add" due-to="Gary Gregory">
        Add methods to get the contents of file objects as strings.
      </action>
      <action issue="VFS-720" dev="ggregory" type="add" due-to="Boris Petrov">
        Implement Closeable for RandomAccessContent #66.
      </action>
      <action issue="VFS-721" dev="ggregory" type="add" due-to="Gary Gregory">
        Add support for symbolic links for the local file system and add FileObject#isSymbolicLink().
      </action>
      <action issue="VFS-722" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Collections from 4.3 to 4.4.
      </action>
      <!-- Source code notes -->
      <action dev="ggregory" type="update">
        Source incompatibility: org.apache.commons.vfs2.FileFilter.accept(FileSelectInfo) now throws checked exception FileSystemException.
      </action>
      <action dev="ggregory" type="update">
        Public API note: The overridden methods getURI() and getFriendlyURI() in org.apache.commons.vfs2.provider.local.LocalFileName where removed but are implemented in a superclass.
      </action>
      <action dev="ggregory" type="update">
        Public API note: The overridden method org.apache.commons.vfs2.provider.sftp.SftpFileObject#refresh() was removed but is implemented in a superclass.
      </action>
      <action dev="ggregory" type="update">
        Public API note: The overridden method org.apache.commons.vfs2.provider.sftp.SftpFileProvider#init() was removed but is implemented in a superclass.
      </action>
    </release>
    <release version="2.3" date="2019-02-01" description="Feature and maintenance release.">
      <action issue="VFS-645" dev="ggregory" type="fix">
		VfsClassLoaderTests and JarProviderTestCase fails on Java 9 and up.
      </action>
      <action issue="VFS-678" dev="ecki" type="fix">
        Fix various LGTM.com code review warnings.
      </action>
      <action issue="VFS-652" dev="ecki" type="fix">
        PatternFileSelector documentation to describe actual matching against getPath().
      </action>
      <action issue="VFS-650" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.15 to 1.16.1.
      </action>
      <action issue="VFS-646" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.14 to 1.15.
      </action>
      <action issue="VFS-589" dev="ggregory" type="fix" due-to="L, Gary Gregory">
        SFTP moveTo operation hangs if the server does not support SSH channelExec.
      </action>
      <action issue="VFS-653" dev="ggregory" type="update">
        Replace use of deprecated APIs in HDFS provider.
      </action>
      <action issue="VFS-655" dev="ggregory" type="fix" due-to="Arnaud MERGEY">
        OSGI MANIFEST.MF "Import-Package" should be ";resolution:=optional" for Maven "optional" dependencies.
      </action>
      <action issue="VFS-657" dev="ggregory" type="fix" due-to="Elias Putz">
        FileSelector implementations like FileDepthSelector should throw Exception.
      </action>
      <action issue="VFS-614" dev="ggregory" type="fix" due-to="Boris Petrov, Otto Fowler">
        MonitorInputStream should not close the stream in read().
      </action>
      <action issue="VFS-666" dev="ggregory" type="update">
        Update Apache Commons Collections from 4.1 to 4.2.
      </action>
      <action issue="VFS-667" dev="ggregory" type="fix">
        org.apache.commons.vfs2.provider.res.ResourceFileProvider.findFile(FileObject, String, FileSystemOptions) should throw a org.apache.commons.vfs2.FileSystemException instead of a NPE when the class loader is null.
      </action>
      <action issue="VFS-668" dev="ggregory" type="update">
        Throw a NPE with a better message when a class loader is null.
      </action>
      <action issue="VFS-669" dev="ggregory" type="fix">
        org.apache.commons.vfs2.util.CombinedResources.loadResources(String) should not throw an NPE for the system class loader is null.
      </action>
      <action issue="VFS-671" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.16.1 to 1.18.
      </action>
      <action issue="VFS-675" dev="ggregory" type="fix">
        NullPointerException at AbstractFileObject.java:221.
      </action>
      <action issue="VFS-680" dev="ggregory" type="update">
        Update from Java 7 to Java 8.
      </action>
      <action issue="VFS-681" dev="ggregory" type="update" due-to="Robert DeRose">
        VFS.setManager should be synchronized; #43.
      </action>
      <action issue="VFS-674" dev="ggregory" type="fix" due-to="Boris Petrov, Gary Gregory">
        Cannot close an FTP input stream without an exception.
      </action>
      <action issue="VFS-682" dev="ggregory" type="update">
        Throw a org.apache.commons.vfs2.FileSystemException instead of a NullPointerException in org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveName(FileName, String, NameScope).
      </action>
      <action issue="VFS-294" dev="ggregory" type="fix" due-to="Johannes Scharf">
        NullPointerException in FtpFileObject.getChildFile().
      </action>
      <action issue="VFS-679" dev="ggregory" type="fix" due-to="Boris Petrov, Gary Gregory">
        NullPointerException in FtpFileObject.doGetLastModifiedTime().
      </action>
      <action issue="VFS-398" dev="ggregory" type="fix" due-to="Otto Fowler">
        FtpFileObject.getChildren() fails when a folder contains a file with a colon in the name.
      </action>
      <action issue="VFS-688" dev="ggregory" type="update">
        [SFTP] Update jsch from 0.1.54 to 0.1.55.
      </action>
      <action issue="VFS-677" dev="ggregory" type="add" due-to="dingxbcn">
        [SFTP] Add support for append mode.
      </action>
      <action issue="VFS-673" dev="ggregory" type="add" due-to="Oleksandr Lykhonosov">
        [SFTP] Support com.jcraft.jsch.ConfigRepository (~/.ssh/config) with SftpFileSystemConfigBuilder and flag to load OpenSSHConfig.
      </action>
      <action issue="VFS-673" dev="ggregory" type="add" due-to="Daniel Banks">
        DefaultFileSystemManager should implement AutoCloseable.
      </action>
      <action issue="VFS-637" dev="ggregory" type="add" due-to="Gary Gregory">
        Zip files with legacy encoding and special characters let VFS crash.
      </action>
      <action issue="VFS-360" dev="ggregory" type="add" due-to="Woonsan Ko">
        Add HTTP provider based on HttpComponents HttpClient 4.
      </action>
      <action issue="VFS-689" dev="ggregory" type="add" due-to="Gary Gregory">
        org.apache.commons.vfs2.provider.http.HttpFileObject.getHeadMethod() does not release connection when an exception is thrown.
      </action>
    </release>
    <release version="2.2" date="2017-10-06" description="Feature and maintenance release.">
      <action issue="VFS-642" dev="pschumacher" type="update" due-to="ilangoldfeld">
        Upgrade to jcifs 1.3.17
      </action>
      <action issue="VFS-189" dev="kinow" type="fix">
        Possible NPE in DefaultFileSystemManager.
      </action>
      <action issue="VFS-628" dev="ggregory" type="add">
        Add a file inverter FileSelector: InvertIncludeFileSelector.
      </action>
      <action issue="VFS-612" dev="ggregory" type="update">
        Update the platform requirement from Java 6 to Java 7.
      </action>
      <action issue="VFS-615" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.11 to 1.12.
      </action>
      <action issue="VFS-629" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.12 to 1.13.
      </action>
      <action issue="VFS-639" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.13 to 1.14.
      </action>
      <action issue="VFS-631" dev="ggregory" type="update">
        Update from Apache Commons Net 3.5 to 3.6.
      </action>
      <action issue="VFS-632" dev="ggregory" type="update">
        Update from JCraft jsch for SFTP/SSH from 0.1.53 to 0.1.54.
      </action>
      <action issue="VFS-621" dev="ggregory" type="update">
        Add API VFS.setManager(FileSystemManager).
      </action>
      <action issue="VFS-643" dev="ggregory" type="update">
        VFS should not log at the INFO level.
      </action>
      <action issue="VFS-620" dev="ggregory" type="fix" due-to="stevezhuang">
        FileObject.moveTo(FileObject) API doesn't work well for a Linux FTP.
      </action>
      <action issue="VFS-291" dev="ggregory" type="fix">
        ZIP archives are not properly closed after unzipping and cannot be deleted until the JVM exists.
      </action>
      <action issue="VFS-644" dev="ggregory" type="fix">
        AbstractFileSystem.streamClosed() always sets openStream count to zero.
      </action>
    </release>
    <release version="2.1" date="2016-05-19" description="New features and bug fix release.



Please note that the Clirr report shows several errors.

These may affect source compatibility.

However they should not affect binary compatibility, as explained below.



FileContent, FileName, FileObject, FileSystemManager, RandomAccessContent:

The above interfaces have been updated to add new methods.

This does not affect binary compatibility; for details please see:

https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.5.3-100

The above changes may affect source compatibility.


Changes to method parameters and return types in TarFileObject and TarFileSystem

The original parameter/return types were the following:

org.apache.commons.vfs2.provider.tar.TarEntry

org.apache.commons.vfs2.provider.tar.TarInputStream

The above were package protected, so any methods using them did not form part of the public API.

Therefore source and binary compatibility is not affected.">
<!--       <action issue="VFS-443" dev="ggregory" type="update" due-to="nickallen"> -->
<!--        [Local] Need an easy way to convert from a FileObject to a File. -->
<!--       </action> -->
<!-- START Might need to be moved to the next version -->
     <action issue="VFS-607" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.10 to 1.11.
     </action>
     <action issue="VFS-608" dev="ggregory" type="update">
        Update Apache Commons Net from 3.4 to 3.5.
     </action>
<!-- END Might need to be moved to the next version -->
     <action issue="VFS-424" dev="ecki" type="fix">
        Fix StandardFileSystemManager class loading so it works in a OSGi environment.
     </action>
      <action issue="VFS-490" dev="ecki" type="fix">
        [vfsclassloader] Do not open folders with .jar extension. Adds tests.
     </action>
      <action issue="VFS-582" dev="ecki" type="fix">
        [tests] revert rename of getTestDirectoryFile to make test classes more compatible for external providers.
     </action>
      <action issue="VFS-480" dev="ecki" type="fix">
        Make startup of SoftRefsFileCache cleaner thread work and less racy to avoid leaks.
     </action>
      <action issue="VFS-549" dev="ecki" type="fix">
        Use File.seperator instead of getProperty("file.separator").
     </action>
      <action issue="VFS-567" dev="ecki" type="fix" due-to="Antonio Petrelli">
        [ftp] Ignore exceptions while QUIT/disconnect.
     </action>
      <action issue="VFS-572" dev="ecki" type="fix" due-to="Sandra Parsick">
        [sftp] better documentation for knownhosts file option.
     </action>
      <action issue="VFS-574" dev="ecki" type="fix">
        Ensure FileOpertionProviders are closed. Adds some testcases.
        The error code for missing operations exceptions corrected: vfs.operation/operation-not-supported.error
     </action>
      <action issue="VFS-279" dev="ecki" type="fix" due-to="Didier Earith, Simon Legner">
        [local] Avoid ClassCastException when replicating local files while OnCall caching is active.
      </action>
      <action issue="VFS-297" dev="joehni" type="fix" due-to="Kirill Safonov, Jimmy Praet">
        [sftp] VSF fails to reuse FileSystem instances if FileSystemOptions contain
        an array as value. Reported for SFTP using identities.
      </action>
      <action issue="VFS-198" dev="ecki" type="add" due-to="Andrew Franklin, Simon Legner">
        [http] Make user agent configurable.
      </action>
      <action issue="VFS-202" dev="ecki" type="fix" due-to="Sergey Vladimirov, Simon Legner">
        [http] Allow URLs responding with 405 to HEAD requests.
      </action>
      <action issue="VFS-490" dev="ecki" type="fix">
        [hdfs] Make OSGi package imports for hdfs resolution=optional.
        Removed all scopes from dependency management.
      </action>
      <action issue="VFS-560" dev="ecki" type="fix">
        [http] avoid initial HEAD request to root of HttpFileSystem as it might be wrong context.
      </action>
      <action issue="VFS-236" dev="ecki" type="fix" due-to="Matt Casters">
        [smb] Allow SMB to be used with no authentication.
      </action>
      <action issue="VFS-564" dev="ecki" type="fix" due-to="Dmitry Konstantinov">
        Make some loggers static.
      </action>
      <action issue="VFS-555" dev="rwhitcomb" type="add">
        [hdfs] Add the ability to specify an HDFS configuration file with HdfsFileSystemConfigBuilder.
      </action>
      <action issue="VFS-557" dev="ecki" type="fix">
       [webdav][test] Create WebDav test directory in target/test. Avoid creating core/jackrabbit/tmp.
       Logfiles of Jackrabbit are preserved when -DWebdavProviderTestCase.Debug=true is specified.
      </action>
      <action issue="VFS-558" dev="ecki" type="fix">
       Make moveTo() and getParent() work with CacheStrategy.ON_CALL.
       In case of FTP Provider it would lead otherwise to an UnsupportedOperationException.
      </action>
      <action dev="ecki" type="fix">
       [sandbox] RACRandomAccessFile is now in org.apache.commons.vfs2.util package (so sandbox has only one overlapping package).
      </action>
      <action issue="VFS-530" dev="ecki" type="update" due-to="Dave Marion">
       [hdfs] Use stable Apache Hadoop 2.6 dependencies.
      </action>
      <action dev="ecki" type="add">
       [example] make VFS Shell print version and implement new 'info' command.
      </action>
      <action issue="VFS-552" dev="ecki" type="fix">
       [sandbox] include vfs-providers.xml in JAR for dynamic registration of mime and smb providers.
      </action>
      <action issue="VFS-551" dev="ecki" type="fix" due-to="David Camilo Espitia Manrique">
       Javadoc: make it clear that DefaultCryptor is only an obfuscation function.
      </action>
      <action issue="VFS-309" dev="ecki" type="fix">
       DefaultFileContent will remove thread data whenever possible to avoid leaks.
      </action>
      <action issue="VFS-487" dev="ecki" type="fix" due-to="Dave Marion">
       DefaultFileMonitor detects recreated files.
      </action>
      <action issue="VFS-523" dev="ecki" type="fix" due-to="Roger Whitcomb">
       [HDFS] Make HdfsFileObject.equal use system hashcode/equals instead of
       wrongly comparing file path only.
      </action>
      <action issue="VFS-544" dev="ecki" type="fix">
       [Virtual] Allow virtual file systems and virtual file system provider
       to be closed, to avoid memory leak.
      </action>
      <action issue="VFS-142" dev="ecki" type="fix" due-to="Ryan Boettcher">
       Use ThreadLocal.remove() to clean out FileContentThreadData objects.
      </action>
      <action issue="VFS-545" dev="ecki" type="fix">
       Make DefaultFilesCache remove reference to filesystem when it is cleared (closed).
      </action>
      <action issue="VFS-521" dev="ecki" type="fix">
       [Ram][Tests] Make RAM provider test pass on Java 8
       (JDK-8042377, self-suppression not permitted, MonitorOutputStream#close()).
      </action>
      <action issue="VFS-601" dev="ggregory" type="update">
       Update Apache Commons Net from 3.3 to 3.4.
      </action>
      <action issue="VFS-602" dev="ggregory" type="update">
       Update Apache Commons IO from 2.4 to 2.5.
      </action>
      <action issue="VFS-579" dev="ggregory" type="update">
       Update Jsch from 0.1.51 to 0.1.53.
      </action>
      <action issue="VFS-542" dev="ggregory" type="update">
       Update Jsch from 0.1.50 to 0.1.51.
      </action>
      <action issue="VFS-578" dev="ggregory" type="update">
       Update Apache Commons Compress from 1.9 to 1.10.
      </action>
      <action issue="VFS-541" dev="ggregory" type="update">
       Update Apache Commons Compress from 1.6 to 1.9.
      </action>
      <action issue="VFS-540" dev="ggregory" type="update">
       Update Apache Commons Logging from 1.1.3 to 1.2.
      </action>
      <action issue="VFS-539" dev="ggregory" type="update">
       Update Apache Commons Lang from 3.1 to 3.3.2.
      </action>
      <action issue="VFS-532" dev="ggregory" type="add" due-to="Gareth Daniel Smith">
       [FTP] Allow configuring remoteVerificationEnabled on FTPClient instances.
      </action>
      <action issue="VFS-338" dev="ecki" type="fix" due-to="Daniel R.">
       [Local][Tests] Avoid IndexOutOfBoundsException when validating local file URIs.
      </action>
      <action issue="VFS-526" dev="ecki" type="update">
       [HDFS][Tests] Support HDFS testing on Windows (but keep profile "no-hdfs" enabled on Windows VFS-529).
      </action>
      <action issue="VFS-453" dev="ecki" type="update" due-to="Jiri Syrovy">
       [HTTP][WEBDAV] Add file system options for connect and socket timeout.
      </action>
      <action issue="VFS-167" dev="ecki" type="update" due-to="Jimmy Praet">
       [FTP] Allow Proxy support to file system options.
      </action>
      <action issue="VFS-520" dev="ecki" type="update">
       Make Javadoc compatible with Java 8 tool.
      </action>
      <action issue="VFS-518" dev="ggregory" type="update" due-to="Roland Illig">
        Documentation of FileSystemOptions should be more helpful.
      </action>
      <action issue="VFS-500" dev="ggregory" type="update" due-to="Bernd Eckenfels">
        VFSClassLoader.findResources missing.
      </action>
      <action issue="VFS-514" dev="ggregory" type="update" due-to="Bernd Eckenfels">
        [tests] PermissionsTests leaves unclean test directory.
      </action>
      <action issue="VFS-501" dev="ggregory" type="update" due-to="Yves Schumann">
        Hide passwords from log/console output.
      </action>
      <action issue="VFS-496" dev="ggregory" type="update" due-to="Bernd Eckenfels">
        Resource translation issues.
      </action>
      <action issue="VFS-494" dev="ggregory" type="update" due-to="Allen Xudong Cheng">
        [SFTP] No support for SFTP servers with non Latin-1 file name encoding.
      </action>
      <action issue="VFS-368" dev="ggregory" type="update" due-to="Brendan Long">
        [SFTP] Documentation implies that "userDirIsRoot" defaults to true.
      </action>
      <action issue="VFS-265" dev="ggregory" type="update" due-to="Scott Bjerstedt">
        [FTP] Set user dir as root dir by default.
      </action>
      <action issue="VFS-489" dev="ggregory" type="fix" due-to="Bernd Eckenfels">
        [tests] ProviderWriteTests#testListener does not fail cleanly.
      </action>
      <action issue="VFS-486" dev="ggregory" type="fix" due-to="Sam Haldane">
        DefaultFileMonitor sleeps for twice the specified delay when checkPerRun > 0.
      </action>
      <action issue="VFS-484" dev="ggregory" type="update">
        [SFTP] Update Jsch to 0.1.50 from 0.1.49.
      </action>
      <action issue="VFS-482" dev="ggregory" type="fix">
        Wrong assertion messages in RAM provider test case.
      </action>
      <action issue="VFS-507" dev="ggregory" type="update">
        Update to Apache Commons Collection 4.1 from 3.2.1 and use generics.
      </action>
      <action issue="VFS-476" dev="ggregory" type="update">
        Update Apache Commons Logging to 1.1.3 from 1.1.2.
      </action>
      <action issue="VFS-475" dev="ggregory" type="update">
        Update Apache Commons Net to 3.3 from 3.2.
      </action>
      <action issue="VFS-506" dev="ggregory" type="update">
        [Tar][Bzip2] Update Apache Commons Compress to 1.6 from 1.5.
      </action>
      <action issue="VFS-471" dev="ggregory" type="update">
        Update to Apache Commons Compress 1.5.
      </action>
      <action issue="VFS-469" dev="joehni" type="remove">
        Remove unused dependency to javax.jcr:jcr.
      </action>
      <action issue="VFS-283" dev="joehni" type="update">
        [SFTP] SFTP provider did not support passphrase-protected keys nor the exchange of a public key with
        a requesting SFTP server. To support such triples (private key/passphrase/public key) instead of private
        keys only, a new structure EntityInfo has been created. SftpFileSystemConfigBuilder has now the new
        getter and setter methods getIdentityInfo and setIdentity info which replace the now deprecated methods
        getIdentities and setIdentities.
      </action>
      <action issue="VFS-460" dev="joehni" type="fix">
        Dependency to commons-compress set as optional.
      </action>
      <action issue="VFS-468" dev="joehni" type="add">
        [FTPS] Add option for KeyManager (and TrustManager) to support FTPS servers that ask for the client certificate for authentication.
      </action>
      <action issue="VFS-464" dev="joehni" type="fix">
        StaticUserAuthenticator should return only requested authentication data.
      </action>
      <action issue="VFS-463" dev="joehni" type="update">
        FileSytemConfigBuilder supports system properties for the value of enum-based configuration entries.
      </action>
      <action issue="VFS-462" dev="joehni" type="update">
        [FTPS] Deprecate FtpsFileSystemConfigBuilder.setFtpsType and FtpsFileSystemConfigBuilder.getFtpsType
        in favor of FtpsFileSystemConfigBuilder.setFtpsMode and FtpsFileSystemConfigBuilder.getFtpsMode which
        use new enum FtpsMode instead.
      </action>
      <action issue="VFS-461" dev="joehni" type="fix">
        [FTP/FTPS] ConfigBuilder does not consider system properties for the value of SoTimeout and Encoding.
      </action>
      <action issue="VFS-412" dev="joehni" type="add" due-to="Jose Juan Montiel">
        [FTPS] Add support for command to set the DataChannelProtectionLevel.
      </action>
      <action issue="VFS-459" dev="joehni" type="update">
        [FTP/FTPS] Sent commands and the received answer is logged at debug level.
      </action>
      <action issue="VFS-458" dev="joehni" type="fix">
        [FTPS] Provider missed functionality and bug fixes already available for the FTP provider.
      </action>
      <action issue="VFS-452" dev="ggregory" type="fix" due-to="Jean-Marc Borer">
        [HTTP] HttpFileObject read/write attributes should reflect underlying FileSystem capabilities.
      </action>
      <action issue="VFS-285" dev="tn" type="fix" due-to="Kirill Safonov">
        AbstractFileObject.getChildren() may corrupt its internal state if a filename
        can not be resolved.
      </action>
      <action issue="VFS-450" dev="ggregory" type="fix" due-to="Dave Marion">
        [HDFS] HDFSFileSystem.resolveFile() does not honor CacheStrategy.ON_RESOLVE.
      </action>
      <action issue="VFS-442" dev="ggregory" type="add" due-to="Dave Marion">
        [HDFS] Add an HDFS FileSystem Provider.
      </action>
      <action issue="VFS-448" dev="ggregory" type="fix">
        commons-vfs 2.0 JAR has flawed OSGi MANIFEST.MF.
      </action>
      <action issue="VFS-447" dev="ggregory" type="add">
        [FTP/FTPS] Update Apache Commons Net to 3.2 from 3.1.
      </action>
      <action issue="VFS-445" dev="ggregory" type="add">
        Add FileSystemManager.resolveFile(URI) and resolveFile(URL).
      </action>
      <action issue="VFS-440" dev="ggregory" type="add" due-to="bpiwowar">
        [SFTP] Stream (e.g. netcat) proxy for Sftp file system (aka ProxyCommand).
      </action>
      <action issue="VFS-439" dev="ggregory" type="fix" due-to="pensecit">
        StaticUserAuthenticator usage example wrong.
      </action>
      <action issue="VFS-437" dev="ggregory" type="fix" due-to="denniszhu, danttran, jpowang">
        [FTP] StackOverFlowError getting the type of a directory with a symbolic link to a parent directory with the same name.
      </action>
      <action issue="VFS-435" dev="ggregory" type="fix" due-to="george scott">
        FileSystemConfigBuilder does not use prefix for some system property lookups.
      </action>
      <action issue="VFS-434" dev="ggregory" type="fix">
        FileSystemException should reuse IOException's chained exception.
      </action>
      <action issue="VFS-433" dev="ggregory" type="fix">
        [WebDAV] Message "vfs.provider.webdav/propfind.error" is not defined.
      </action>
      <action issue="VFS-430" dev="ggregory" type="fix" due-to="antonin.stefanutti">
        The SoftRefFilesCache class logs clear text password.
      </action>
      <action issue="VFS-432" dev="ggregory" type="add">
        [HTTP][WebDAV] Allow HTTP follow redirect.
      </action>
      <action issue="VFS-431" dev="ggregory" type="add">
        FileSystemOption does not implement toString().
      </action>
      <action issue="VFS-429" dev="ggregory" type="fix">
        Remove extra FileSystem ivar in AbstractFileObject subclasses with generics.
      </action>
      <action issue="VFS-427" dev="ggregory" type="fix" due-to="awelynant">
        [HTTP] NPE on HttpFileObject.getContent().getContentInfo().
      </action>
      <action issue="VFS-405" dev="ggregory" type="add" due-to="dwaszak">
        Get/set the file permissions.
      </action>
      <action issue="VFS-457" dev="joehni" type="update">
        Update test dependencies: sshd-core version 0.7.0 to 0.8.0; mina-core 2.0.4 to 2.0.7; junit 4.11 to 4.12; slf4j-* 1.5.5 to 1.5.11
      </action>
      <action issue="VFS-456" dev="joehni" type="update">
        Use org.bouncycastel:bcprov-jdk16 instead of org.bouncycastle:bcprof-jdk15on since Java 1.6 is required.
      </action>
      <action issue="VFS-415" dev="ggregory" type="update">
        Update VFS requirement to Java 1.6.
      </action>
      <action issue="VFS-426" dev="ggregory" type="add" due-to="daniel.bergholm">
        HTTP URL query string not part of cache key.
      </action>
      <action issue="VFS-425" dev="ggregory" type="add">
        Add API FileObject.isExecutable().
      </action>
      <action issue="VFS-421" dev="ggregory" type="add" due-to="bpiwowar">
        [SFTP] Configure a custom Identity Repository.
      </action>
      <action issue="VFS-418" dev="ggregory" type="update">
        Update to Apache Commons Compress 1.4.1.
      </action>
      <action issue="VFS-417" dev="ggregory" type="add">
        [RAM][Local] Add and implement new API: RandomAccessContent.setLength(long).
      </action>
      <action issue="VFS-406" dev="ggregory" type="fix" due-to="mp1">
        [RAM] resize throws ArrayOOBE when shrinking in size.
      </action>
      <action issue="VFS-321" dev="ggregory" type="update" due-to="sebb">
        AbstractFileObject sometimes uses getFileSystem() and sometimes references "fs" field directly.
      </action>
      <action issue="VFS-327" dev="ggregory" type="update" due-to="sebb">
        UriParser.canonicalizePath possible NPE for filenameParser.
      </action>
      <action issue="VFS-353" dev="ggregory" type="fix" due-to="bergander">
        [FTP] Client should call logout before disconnecting.
      </action>
      <action issue="VFS-408" dev="ggregory" type="fix" due-to="anilm2@yahoo.com">
        CompressedFileFileObject Exception thrown when container file has no extension.
      </action>
      <action issue="VFS-400" dev="ggregory" type="add">
        Add a FileSelector based on regular expressions.
      </action>
      <action issue="VFS-258" dev="ggregory" type="fix" due-to="mzawirski">
        [SFTP][RAM] Unsafe casting to AbstractFileObject subclasses in doRename().
      </action>
      <action issue="VFS-254" dev="ggregory" type="add" due-to="mzawirski">
        Let FileObject and FileContent extend java.io.Closeable.
      </action>
      <action issue="VFS-413" dev="ggregory" type="fix" due-to="polivenok">
        [FTP] No support for FTP servers with non Latin-1 control encoding.
      </action>
      <action issue="VFS-252" dev="ggregory" type="add">
        [SMB] SmbFileObject does not support setLastModifiedTime while jcifs supports it.
      </action>
      <action issue="VFS-200" dev="ggregory" type="fix">
        [SFTP] Failure when files are very large.
      </action>
      <action issue="VFS-416" dev="joehni" type="update">
        [SFTP] Update Jsch to version 0.1.49 from 0.1.47.
      </action>
      <action issue="VFS-296" dev="ggregory" type="fix" due-to="andreasp">
        [FTP] FTP socket timeout setting doesn't work if connect hangs.
      </action>
      <action issue="VFS-313" dev="ggregory" type="add" due-to="bdavis@saintandreas.org">
        [FTP] Configuration does not include option for setting socket timeout.
      </action>
      <action issue="VFS-414" dev="ggregory" type="add">
        [FTP] Add config API to set the file type.
      </action>
      <action issue="VFS-182" dev="ggregory" type="add">
        [FTP] Usage of FTP with heterogeneous FTP server (possibility of using Ascii file type).
      </action>
      <action issue="VFS-395" dev="ggregory" type="update">
        [POM] Remove maven-scm-* dependencies.
      </action>
      <action issue="VFS-411" dev="ggregory" type="update">
        [SFTP] Update Jsch to version 0.1.47 from 0.1.46.
      </action>
      <action issue="VFS-410" dev="ggregory" type="fix" due-to="mstockhammer">
        [SFTP] SftpFileObject getInputStream(long) reads the whole file into memory.
      </action>
      <action issue="VFS-409" dev="ggregory" type="update">
        Update Apache Commons Compress to 1.4 from 1.3.
      </action>
      <action issue="VFS-407" dev="ggregory" type="fix" due-to="mp1">
        [RAM] Reading a RAM FileSystem file fails because it never returns EOF -1.
      </action>
      <action issue="VFS-404" dev="ggregory" type="update">
        [FTP][FTPS] Update Apache Commons Net to 3.1 from 3.0.1.
      </action>
      <action issue="VFS-402" dev="ggregory" type="update">
        [WebDAV] Update Apache Jackrabbit 1.5.2 to 1.6.5.
      </action>
      <action issue="VFS-401" dev="ggregory" type="update">
        Update JSch to 0.1.46 from 0.1.45 for the SFTP provider.
      </action>
      <action issue="VFS-392" dev="ggregory" type="update">
        Build tests WebDAV file system with an embedded WebDAV server (Apache Jackrabbit).
      </action>
      <action issue="VFS-391" dev="ggregory" type="update">
        Build tests URL HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
      </action>
      <action issue="VFS-390" dev="ggregory" type="update">
        Use variable argument list in org.apache.commons.vfs2.util.Messages instead of Object[].
      </action>
      <action issue="VFS-389" dev="ggregory" type="update">
        Use variable argument lists in FileSystemException instead of Object[]s.
      </action>
      <action issue="VFS-388" dev="ggregory" type="update">
        Build tests SFTP file system with an embedded SFTP server (Apache MINA).
      </action>
      <action issue="VFS-387" dev="ggregory" type="update">
        Build tests FTP file system with an embedded FTP server (Apache MINA).
      </action>
      <action issue="VFS-386" dev="ggregory" type="update">
        Build tests HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
      </action>
      <action issue="VFS-385" dev="ggregory" type="update">
        Add HTTP status code to HTTP file provider exception messages when available.
      </action>
      <action issue="VFS-384" dev="ggregory" type="update">
        Update Apache Commons Net to 3.0.1 from 2.2 for FTP and SFTP providers.
      </action>
      <action issue="VFS-383" dev="ggregory" type="update">
        Update JSch to 0.1.45 from 0.1.42 for the SFTP provider.
      </action>
      <action issue="VFS-382" dev="ggregory" type="fix">
        SFTP getChildren() does not fail when called on a file.
      </action>
      <action issue="VFS-381" dev="ggregory" type="add">
        Iterate over a FileObject using the Java "foreach" statement, to provide all descendents of a FileObject.
      </action>
      <action issue="VFS-380" dev="ggregory" type="fix">
        FTP connect.error message used instead of SFTP connect.error message.
      </action>
      <action issue="VFS-379" dev="ggregory" type="update">
        Replace custom BZIP2 code with Apache Commons Compress 1.3.
      </action>
      <action issue="VFS-378" dev="ggregory" type="fix">
        Tar error message are missing from resource file.
      </action>
      <action issue="VFS-377" dev="ggregory" type="update">
        Replace custom TAR code with Apache Commons Compress 1.3.
      </action>
      <action issue="VFS-375" dev="ggregory" type="update">
        Upgrade to Apache Commons Compress 1.3 from 1.2.
      </action>
      <action issue="VFS-374" dev="ggregory" type="fix">
        Incorrect lazy initialization of static field org.apache.commons.vfs2.util.Messages.resources in org.apache.commons.vfs2.util.Messages.findMessage(String)Add FileContent write APIs.
      </action>
      <action issue="VFS-373" dev="ggregory" type="add">
        Add FileContent write APIs.
      </action>
      <action issue="VFS-372" dev="ggregory" type="add">
        Add constructors FileDepthSelector() and FileDepthSelector(int).
      </action>
      <action issue="VFS-371" dev="ggregory" type="add">
        Add FileObject API deleteAll().
      </action>
      <action issue="VFS-370" dev="ggregory" type="add">
        Add a FileExtensionSelector class.
      </action>
      <action issue="VFS-367" dev="ggregory" type="add">
        Add APIs FileObject isFile(), FileObject isFolder(), and FileName isFile().
      </action>
      <action issue="VFS-366" dev="ggregory" type="update">
        Can't sort a List of FileObject's, FileObject to implement Comparable&lt;FileObject&gt;.
      </action>
      <action issue="VFS-341" dev="rgoers" type="update" due-to="Rajika Kumarasiri">
        Enable logging of JSch using the Commons Logging Log object in SftpClientFactory.
      </action>
      <action issue="VFS-355" dev="rgoers" type="fix" due-to="Miroslav Pokorny">
        The read method of RamFileRandomAccessContent's input stream does not return -1 at eof.
      </action>
      <action issue="VFS-356" dev="rgoers" type="fix">
        Throw an IOException if an attempt is made to seek to a position before the start of the file.
      </action>
      <action issue="VFS-359" dev="rgoers" type="fix" due-to="Miroslav Pokorny">
        Don't delete a RamFileObject if it is open.
      </action>
      <action issue="VFS-352" dev="rgoers" type="fix">
        ZipFileSystem now uses an internal Map as a cache for all the files in the zip archive.
      </action>
      <action issue="VFS-351" dev="rgoers" type="fix" due-to="John Backstrand">
        Chain the SftpException in the FileSystemException.
      </action>
      <action issue="VFS-361" dev="rgoers" type="update">
        Upgrade commons collections version to 3.2.1.
      </action>
      <action issue="VFS-325" dev="rgoers" type="fix" due-to="Larry Reeve">
        Allow # character in file names.
      </action>
      <action issue="VFS-335" dev="rgoers" type="fix">
        Use atomic variables in MonitorInputStream.
      </action>
      <action issue="VFS-364" dev="rgoers" type="fix">
        Check the href in the response for just a path in addition to a full uri.
      </action>
    </release>
    <release version="2.0" date="2011-08-24" description="Backwards incompatible update of Commons VFS to Java 5">
      <action issue="VFS-348" dev="rgoers" type="fix" due-to="Stefan Bodewig">
        Update the version of commons-net.
      </action>
      <action issue="VFS-230" dev="rgoers" type="fix">
        Documented FileSystem capabilities on the web site.
      </action>
      <action issue="VFS-337" dev="rgoers" type="fix">
        AbstractFileObject and classes that extend from it use AbstractFileName in the constructor and in
        the createFile method.
      </action>
       <action issue="VFS-245" dev="rgoers" type="fix">
        AbstractFileName is not immutable as it should be. equals(), hashcode() and compareTo() have been modified
        to return the same results regardless of whether the FileType is changed.
      </action>
      <action issue="VFS-334" dev="sebb" type="fix">
        DefaultFileSystemConfigBuilder.getConfigClass() returns DefaultFileSystemConfigBuilder.class which is not a FileSystem
      </action>
      <action dev="rgoers" type="fix" issue="VFS-305" due-to="Tom">
        Add encoding option to FTP provider.
      </action>
       <action dev="rgoers" type="fix" issue="VFS-315" due-to="David Hausladen">
        Fix potential NullPointerException if the DavProperty is null or contains null values.
      </action>
       <action dev="rgoers" type="fix" issue="VFS-316" due-to="David Hausladen">
        Add option for preemptive authentication for HTTP based protocols.
      </action>
       <action dev="rgoers" type="fix" issue="VFS-322" due-to="Curtis Boyden">
        Allow tar files that contain files over 2GB in size.
      </action>
       <action dev="rgoers" type="fix" issue="VFS-324" due-to="sebb">
        Clear the cache in RamFileSystem and the children in RamFileData.
      </action>
      <action dev="sebb" type="fix" issue="VFS-319">
        Typo in FtpsFileSystemConfigBuilder.setFtpsType
      </action>
      <action dev="rgoers" type="fix" issue="VFS-227" due-to="Sergey Vladimirov">
        InputStream and RandomAccessContent memory leak in FileContentThreadData
      </action>
      <action dev="rgoers" type="update" issue="VFS-263" due-to="Ingo Maas">
        WebdavFileObject does not implement doSetAttribute()
      </action>
      <action dev="rgoers" type="fix" issue="VFS-259" due-to="Marek Zawirski">
        Http and Webdav FIleContentInfoFactory: undress to AbstractFileObject before casting
      </action>
      <action dev="rgoers" type="fix" issue="VFS-261" due-to="Simon Olofsson">
        WebDAV upload corrupts binary files
      </action>
      <action dev="rgoers" type="fix" issue="VFS-276" due-to="Vince Bonfanti">
        add ProviderTestConfig.getDefaultFileSystemManager() method
      </action>
      <action dev="rgoers" type="fix" issue="VFS-282" due-to="Alexey">
        SftpFileProvider and SftpFileSystemConfigBuilder can't change ssh authentication methods
      </action>
      <action dev="rgoers" type="fix" issue="VFS-269" due-to="Marek Zawirski">
        HttpFileObject: unsupported content over 2GB length
      </action>
      <action dev="rgoers" type="fix" issue="VFS-287" due-to="Mircea-Eugen Ionica">
        LocalFileName objects are not released from AbstractFileSystem.listenerMap when all listeners are removed.
      </action>
      <action dev="rgoers" type="fix" issue="VFS-216" due-to="Reetu Mutti">
        The FTP Configuration includes an option to set a timeout for the data connection, but not for the socket
        timeout. This is a problem, as idle sockets can cause your download to hang forever and never timeout.
      </action>
      <action dev="rgoers" type="fix" issue="VFS-289" due-to="Kirill Safonov">
        FTP connection is not released If exception is thrown out of FtpFileObject.doGetOutputStream().
      </action>
      <action dev="rgoers" type="fix" issue="VFS-286" due-to="Kirill Safonov">
        SftpFileObject.doListChildrenResolved() changes the working dir before doing ChannelSftp.ls() call.
        If ls() throws an exception, the current directory is not reset. All the subsequent operations that rely on the
        current dir will fail trying to change into nonexistent directory.
      </action>
      <action dev="jcarman" type="add" issue="VFS-264" due-to="Scott Bjerstedt">
        Add FTPS provider.
      </action>
      <action dev="rgoers" type="add" issue="VFS-244">
        Rename HttpRandomAccesContent to HttpRandomAccessContent.
      </action>
    </release>
  </body>
</document>
