<?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="20YY-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>
      <!-- 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">
        Add support for FTP 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>
      <!-- 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.7.7.
      </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.40.
      </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.
      </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>
    </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>
