Skip to content

IO-845 PathUtils.copyDirectory copies or follows symbolic links#827

Open
peterdemaeyer wants to merge 2 commits intoapache:masterfrom
peterdemaeyer:IO-845-copyDirectoryPreservesSymbolicLinks
Open

IO-845 PathUtils.copyDirectory copies or follows symbolic links#827
peterdemaeyer wants to merge 2 commits intoapache:masterfrom
peterdemaeyer:IO-845-copyDirectoryPreservesSymbolicLinks

Conversation

@peterdemaeyer
Copy link

Defined the behavior of PathUtils.copyDirectory for symbolic links. It depends on the option LinkOption.NOFOLLOW_LINKS. Non-symbolic (hard) links are out of scope, given that the copy behavior for them was already well-defined: they're treated as regular files.
For the sake of conciseness, the following paragraphs use the term "link" for "symbolic link".

Without NOFOLLOW_LINKS option:

  • Links are followed, so that there are no links in the target directory.
  • Cyclic links result in FileSystemLoopException.
  • Broken links are ignored, they are not copied at all.

With NOFOLLOW_LINKS option:

  • Links are copied as links, so that there are links in the target directory for every link in the source directory.
  • Links that link to a file or directory inside the source directory are copied to relative links inside the target directory, linking to the copied file or directory.
  • Links that link to a file or directory outside the source directory are copied to links inside the target directory, linking to the same file or directory as the link in the source directory.
  • Cyclic links are preserved, mirrored to cyclic links in the target directory.
  • Broken links are ignored, they are not copied at all.

All of this is also explained in the updated JavaDoc.

Thanks for your contribution to Apache Commons! Your help is appreciated!

Before you push a pull request, review this list:

  • Read the contribution guidelines for this project.
  • Read the ASF Generative Tooling Guidance if you use Artificial Intelligence (AI).
  • I used AI to create any part of, or all of, this pull request. Which AI tool was used to create this pull request, and to what extent did it contribute?
  • Run a successful build using the default Maven goal with mvn; that's mvn on the command line by itself.
  • Write unit tests that match behavioral changes, where the tests fail if the changes to the runtime are not applied. This may not always be possible, but it is a best practice.
  • Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
  • Each commit in the pull request should have a meaningful subject line and body. Note that a maintainer may squash commits during the merge process.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant