The GitHub Actions job "Java CI" on commons-vfs.git/VFS-862 has failed.
Run started by GitHub user ilang (triggered by garydgregory).

Head commit for run:
8dc607e5c34743b7c89184758498b8b0e917ee74 / Ilan Goldfeld 
<[email protected]>
[VFS-862] Fix ON_RESOLVE triggering refresh on internal navigation

CacheStrategy.ON_RESOLVE is intended to refresh files when the user
resolves them via the public API. However, internal navigation methods
(getParent, getRoot, getChildren child resolution, symlink resolution)
also called fileSystem.resolveFile(), triggering ON_RESOLVE refreshes
on files the user never asked to refresh.

This became a severe regression after refresh() was changed to
unconditionally clear FtpFileObject.childMap: each child's getParent()
refreshed the parent, clearing its childMap, forcing a new FTP LIST
command per child. A directory with N files produced ~N LIST commands
instead of 1.

Fix:
- Add resolveFileInternal() that skips the ON_RESOLVE refresh. All
  internal navigation call sites use it instead of resolveFile().
- After a fresh directory listing, FTP and SFTP providers propagate
  metadata to cached child objects in-place, preserving object identity.

This establishes a clear contract: cached state is used until the user
explicitly calls refresh() or resolves via the public API. Internal
navigation never triggers server operations.

Tests:
- FtpGetChildrenListCommandTest: verifies findFiles() on a directory
  with 50 files issues exactly 1 LIST command with ON_RESOLVE.
- SftpGetChildrenListCommandTest: verifies refresh + findFiles()
  returns fresh children reflecting filesystem changes.

Report URL: https://github.com/apache/commons-vfs/actions/runs/24154652334

With regards,
GitHub Actions via GitBox

Reply via email to