<?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.8.0" date="2021-MM-DD" description="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>
      <!-- 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.2.
      </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="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="New features and bug fix 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="New features and bug fix 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="New features and bug fix 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="New features and bug fix 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="New features and bug fix 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>
