This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
The following commit(s) were added to refs/heads/master by this push: new 35611879 [MRESOLVER-269] FileProcessor.write( File, InputStream ) is defunct (#222) 35611879 is described below commit 35611879c6b5530b3bfaed6639fdd5cf696d77bd Author: Tamas Cservenak <ta...@cservenak.net> AuthorDate: Fri Nov 18 11:24:14 2022 +0100 [MRESOLVER-269] FileProcessor.write( File, InputStream ) is defunct (#222) The `FileProcessor.write( File, InputStream )` method is completely broken, it always fails. This method is used ONLY when FileTransformer is present. Result of plain oversight and not being covered by tests. --- https://issues.apache.org/jira/browse/MRESOLVER-296 --- .../aether/internal/impl/DefaultFileProcessor.java | 3 +- .../internal/impl/DefaultFileProcessorTest.java | 33 ++++++++++++++++++++++ .../java/org/eclipse/aether/util/FileUtils.java | 4 ++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java index 14177ac5..d9385cbe 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java @@ -32,6 +32,7 @@ import java.io.UncheckedIOException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import org.eclipse.aether.spi.io.FileProcessor; import org.eclipse.aether.util.ChecksumUtils; @@ -94,7 +95,7 @@ public class DefaultFileProcessor public void write( File target, InputStream source ) throws IOException { - FileUtils.writeFile( target.toPath(), p -> Files.copy( source, p ) ); + FileUtils.writeFile( target.toPath(), p -> Files.copy( source, p, StandardCopyOption.REPLACE_EXISTING ) ); } public void copy( File source, File target ) diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultFileProcessorTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultFileProcessorTest.java index 6793977e..4afa5342 100644 --- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultFileProcessorTest.java +++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultFileProcessorTest.java @@ -21,9 +21,11 @@ package org.eclipse.aether.internal.impl; import static org.junit.Assert.*; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.aether.internal.impl.DefaultFileProcessor; @@ -124,4 +126,35 @@ public class DefaultFileProcessorTest target.delete(); } + @Test + public void testWrite() + throws IOException + { + String data = "testCopy\nasdf"; + File target = new File( targetDir, "testWrite.txt" ); + + fileProcessor.write( target, data ); + + assertEquals( data, TestFileUtils.readString( target ) ); + + target.delete(); + } + + /** + * Used ONLY when FileProcessor present, never otherwise. + */ + @Test + public void testWriteStream() + throws IOException + { + String data = "testCopy\nasdf"; + File target = new File( targetDir, "testWriteStream.txt" ); + + fileProcessor.write( target, new ByteArrayInputStream( data.getBytes( StandardCharsets.UTF_8 ) ) ); + + assertEquals( data, TestFileUtils.readString( target ) ); + + target.delete(); + } + } diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/FileUtils.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/FileUtils.java index d350baf7..18cb2ab9 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/FileUtils.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/FileUtils.java @@ -119,7 +119,9 @@ public final class FileUtils } /** - * A file writer, that accepts a {@link Path} to write some content to. + * A file writer, that accepts a {@link Path} to write some content to. Note: the file denoted by path may exist, + * hence implementation have to ensure it is able to achieve its goal ("replace existing" option or equivalent + * should be used). */ @FunctionalInterface public interface FileWriter