[jira] [Commented] (IO-719) PathUtils.copyDirectory() does not work when source and dest belong to different filesystems
[ https://issues.apache.org/jira/browse/IO-719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17281956#comment-17281956 ] Andrew Shcheglov commented on IO-719: - [https://github.com/apache/commons-io/pull/203] There are CI errors, but nothing related to my changes > PathUtils.copyDirectory() does not work when source and dest belong to > different filesystems > > > Key: IO-719 > URL: https://issues.apache.org/jira/browse/IO-719 > Project: Commons IO > Issue Type: Bug > Components: Utilities >Affects Versions: 2.8.0 > Environment: Java 8, Linux >Reporter: Andrew Shcheglov >Priority: Major > Time Spent: 10m > Remaining Estimate: 0h > > This code: > {code:java} > @Test > public void pathUtilsCopyDirFailure() throws IOException { > FileSystem fs1 = Jimfs.newFileSystem(); > Path srcDir = fs1.getPath("srcDir"); > // Create files/dirs in srcDir > Path targetDir = Paths.get("targetDir"); > PathUtils.copyDirectory(srcDir, targetDir); > } > {code} > throws exception: > {noformat} > java.nio.file.ProviderMismatchException > at java.base/sun.nio.fs.UnixPath.toUnixPath(UnixPath.java:198) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:410) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:43) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:130) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:36) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2731) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2796) > at > org.apache.commons.io.file.PathUtils.visitFileTree(PathUtils.java:687) > at > org.apache.commons.io.file.PathUtils.copyDirectory(PathUtils.java:196) > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)
[jira] [Commented] (IO-719) PathUtils.copyDirectory() does not work when source and dest belong to different filesystems
[ https://issues.apache.org/jira/browse/IO-719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17281390#comment-17281390 ] Andrew Shcheglov commented on IO-719: - Jimfs uses a much more "light" approach and does not require access to the disk, as the zipfs does. Ok, I will add jar file to resources then > PathUtils.copyDirectory() does not work when source and dest belong to > different filesystems > > > Key: IO-719 > URL: https://issues.apache.org/jira/browse/IO-719 > Project: Commons IO > Issue Type: Bug > Components: Utilities >Affects Versions: 2.8.0 > Environment: Java 8, Linux >Reporter: Andrew Shcheglov >Priority: Major > > This code: > {code:java} > @Test > public void pathUtilsCopyDirFailure() throws IOException { > FileSystem fs1 = Jimfs.newFileSystem(); > Path srcDir = fs1.getPath("srcDir"); > // Create files/dirs in srcDir > Path targetDir = Paths.get("targetDir"); > PathUtils.copyDirectory(srcDir, targetDir); > } > {code} > throws exception: > {noformat} > java.nio.file.ProviderMismatchException > at java.base/sun.nio.fs.UnixPath.toUnixPath(UnixPath.java:198) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:410) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:43) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:130) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:36) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2731) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2796) > at > org.apache.commons.io.file.PathUtils.visitFileTree(PathUtils.java:687) > at > org.apache.commons.io.file.PathUtils.copyDirectory(PathUtils.java:196) > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)
[jira] [Commented] (IO-719) PathUtils.copyDirectory() does not work when source and dest belong to different filesystems
[ https://issues.apache.org/jira/browse/IO-719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17281339#comment-17281339 ] Andrew Shcheglov commented on IO-719: - [~ggregory], is it ok if I add [Jimfs|https://search.maven.org/artifact/com.google.jimfs/jimfs/1.2/bundle] as test dependency to use it in unit tests? Or PR without tests is also acceptable? > PathUtils.copyDirectory() does not work when source and dest belong to > different filesystems > > > Key: IO-719 > URL: https://issues.apache.org/jira/browse/IO-719 > Project: Commons IO > Issue Type: Bug > Components: Utilities >Affects Versions: 2.8.0 > Environment: Java 8, Linux >Reporter: Andrew Shcheglov >Priority: Major > > This code: > {code:java} > @Test > public void pathUtilsCopyDirFailure() throws IOException { > FileSystem fs1 = Jimfs.newFileSystem(); > Path srcDir = fs1.getPath("srcDir"); > // Create files/dirs in srcDir > Path targetDir = Paths.get("targetDir"); > PathUtils.copyDirectory(srcDir, targetDir); > } > {code} > throws exception: > {noformat} > java.nio.file.ProviderMismatchException > at java.base/sun.nio.fs.UnixPath.toUnixPath(UnixPath.java:198) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:410) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:43) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:130) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:36) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2731) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2796) > at > org.apache.commons.io.file.PathUtils.visitFileTree(PathUtils.java:687) > at > org.apache.commons.io.file.PathUtils.copyDirectory(PathUtils.java:196) > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)
[jira] [Comment Edited] (IO-719) PathUtils.copyDirectory() does not work when source and dest belong to different filesystems
[ https://issues.apache.org/jira/browse/IO-719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17280257#comment-17280257 ] Andrew Shcheglov edited comment on IO-719 at 2/8/21, 5:13 PM: -- Possible solution: stringize relative path inside"resolve()" in "CopyDirectoryVizitor.preVisitDirectory()" and "CopyDirectoryVisitor.vizitFile()", like here: {code:java} @Override public FileVisitResult preVisitDirectory(final Path directory, final BasicFileAttributes attributes) throws IOException { final Path newTargetDir = targetDirectory.resolve(sourceDirectory.relativize(directory).toString()); if (Files.notExists(newTargetDir)) { Files.createDirectory(newTargetDir); } return super.preVisitDirectory(directory, attributes); } @Override public FileVisitResult visitFile(final Path sourceFile, final BasicFileAttributes attributes) throws IOException { final Path targetFile = targetDirectory.resolve(sourceDirectory.relativize(sourceFile).toString()); copy(sourceFile, targetFile); return super.visitFile(targetFile, attributes); } {code} was (Author: ashcheglov): Possible solution: stringize relative path inside"resolve()" in "CopyDirectoryVizitor.preVizitDirectory()" and "CopyDirectoryVizitor.vizitFile()", like here: {code:java} @Override public FileVisitResult preVisitDirectory(final Path directory, final BasicFileAttributes attributes) throws IOException { final Path newTargetDir = targetDirectory.resolve(sourceDirectory.relativize(directory).toString()); if (Files.notExists(newTargetDir)) { Files.createDirectory(newTargetDir); } return super.preVisitDirectory(directory, attributes); } @Override public FileVisitResult visitFile(final Path sourceFile, final BasicFileAttributes attributes) throws IOException { final Path targetFile = targetDirectory.resolve(sourceDirectory.relativize(sourceFile).toString()); copy(sourceFile, targetFile); return super.visitFile(targetFile, attributes); } {code} > PathUtils.copyDirectory() does not work when source and dest belong to > different filesystems > > > Key: IO-719 > URL: https://issues.apache.org/jira/browse/IO-719 > Project: Commons IO > Issue Type: Bug > Components: Utilities >Affects Versions: 2.8.0 > Environment: Java 8, Linux >Reporter: Andrew Shcheglov >Priority: Major > > This code: > {code:java} > @Test > public void pathUtilsCopyDirFailure() throws IOException { > FileSystem fs1 = Jimfs.newFileSystem(); > Path srcDir = fs1.getPath("srcDir"); > // Create files/dirs in srcDir > Path targetDir = Paths.get("targetDir"); > PathUtils.copyDirectory(srcDir, targetDir); > } > {code} > throws exception: > {noformat} > java.nio.file.ProviderMismatchException > at java.base/sun.nio.fs.UnixPath.toUnixPath(UnixPath.java:198) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:410) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:43) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:130) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:36) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2731) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2796) > at > org.apache.commons.io.file.PathUtils.visitFileTree(PathUtils.java:687) > at > org.apache.commons.io.file.PathUtils.copyDirectory(PathUtils.java:196) > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)
[jira] [Commented] (IO-719) PathUtils.copyDirectory() does not work when source and dest belong to different filesystems
[ https://issues.apache.org/jira/browse/IO-719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17280257#comment-17280257 ] Andrew Shcheglov commented on IO-719: - Possible solution: stringize relative path inside"resolve()" in "CopyDirectoryVizitor.preVizitDirectory()" and "CopyDirectoryVizitor.vizitFile()", like here: {code:java} @Override public FileVisitResult preVisitDirectory(final Path directory, final BasicFileAttributes attributes) throws IOException { final Path newTargetDir = targetDirectory.resolve(sourceDirectory.relativize(directory).toString()); if (Files.notExists(newTargetDir)) { Files.createDirectory(newTargetDir); } return super.preVisitDirectory(directory, attributes); } @Override public FileVisitResult visitFile(final Path sourceFile, final BasicFileAttributes attributes) throws IOException { final Path targetFile = targetDirectory.resolve(sourceDirectory.relativize(sourceFile).toString()); copy(sourceFile, targetFile); return super.visitFile(targetFile, attributes); } {code} > PathUtils.copyDirectory() does not work when source and dest belong to > different filesystems > > > Key: IO-719 > URL: https://issues.apache.org/jira/browse/IO-719 > Project: Commons IO > Issue Type: Bug > Components: Utilities >Affects Versions: 2.8.0 > Environment: Java 8, Linux >Reporter: Andrew Shcheglov >Priority: Major > > This code: > {code:java} > @Test > public void pathUtilsCopyDirFailure() throws IOException { > FileSystem fs1 = Jimfs.newFileSystem(); > Path srcDir = fs1.getPath("srcDir"); > // Create files/dirs in srcDir > Path targetDir = Paths.get("targetDir"); > PathUtils.copyDirectory(srcDir, targetDir); > } > {code} > throws exception: > {noformat} > java.nio.file.ProviderMismatchException > at java.base/sun.nio.fs.UnixPath.toUnixPath(UnixPath.java:198) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:410) > at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:43) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:130) > at > org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:36) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2731) > at java.base/java.nio.file.Files.walkFileTree(Files.java:2796) > at > org.apache.commons.io.file.PathUtils.visitFileTree(PathUtils.java:687) > at > org.apache.commons.io.file.PathUtils.copyDirectory(PathUtils.java:196) > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)
[jira] [Created] (IO-719) PathUtils.copyDirectory() does not work when source and dest belong to different filesystems
Andrew Shcheglov created IO-719: --- Summary: PathUtils.copyDirectory() does not work when source and dest belong to different filesystems Key: IO-719 URL: https://issues.apache.org/jira/browse/IO-719 Project: Commons IO Issue Type: Bug Components: Utilities Affects Versions: 2.8.0 Environment: Java 8, Linux Reporter: Andrew Shcheglov This code: {code:java} @Test public void pathUtilsCopyDirFailure() throws IOException { FileSystem fs1 = Jimfs.newFileSystem(); Path srcDir = fs1.getPath("srcDir"); // Create files/dirs in srcDir Path targetDir = Paths.get("targetDir"); PathUtils.copyDirectory(srcDir, targetDir); } {code} throws exception: {noformat} java.nio.file.ProviderMismatchException at java.base/sun.nio.fs.UnixPath.toUnixPath(UnixPath.java:198) at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:410) at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:43) at org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:130) at org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:36) at java.base/java.nio.file.Files.walkFileTree(Files.java:2731) at java.base/java.nio.file.Files.walkFileTree(Files.java:2796) at org.apache.commons.io.file.PathUtils.visitFileTree(PathUtils.java:687) at org.apache.commons.io.file.PathUtils.copyDirectory(PathUtils.java:196) {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)