[
https://issues.apache.org/jira/browse/MNG-7820?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17759042#comment-17759042
]
ASF GitHub Bot commented on MNG-7820:
-------------------------------------
gnodet commented on code in PR #1208:
URL: https://github.com/apache/maven/pull/1208#discussion_r1305645105
##########
maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java:
##########
@@ -465,6 +469,28 @@ public void getRemoteFile(
}
}
+ private void copyFile(File source, File destination) throws IOException {
+ String message;
+ if (!source.exists()) {
+ message = "File " + source + " does not exist";
+ throw new IOException(message);
+ } else if
(!source.getCanonicalPath().equals(destination.getCanonicalPath())) {
+ File parentFile = destination.getParentFile();
+ if (parentFile != null && !parentFile.exists()) {
+ parentFile.mkdirs();
+ }
+ Files.copy(
+ source.toPath(),
+ destination.toPath(),
+ StandardCopyOption.REPLACE_EXISTING,
+ StandardCopyOption.COPY_ATTRIBUTES);
+ if (source.length() != destination.length()) {
Review Comment:
maven-compat is deprecated and should be gone in Maven 4.1, there's no point
in enhancing the code there. Quite the opposite, any change may introduce
regressions in legacy / untested code. Untested, because all the ITs have now
been updated and that code path isn't used anymore, but in very plugins. If
you want to modify a code that has been proven to work, please provide a unit
test for that then.
Also, the following test simply exhibits that the check has an effect and is
not a no-op. The documentation does in no way guarantee that the copy is
atomic, it's actually specifically written that it's not. I agree there's no
way simple way to ensure that in this code, and I certainly would not want to
go in that direction for the reason that code is bound to be removed soon.
```
public static void main(String[] args) throws Exception {
Path dir = Files.createTempDirectory("test-");
Path source = dir.resolve("source.txt");
try (Writer w = Files.newBufferedWriter(source,
StandardCharsets.UTF_8)) {
for (int i = 0; i < 1024 * 1024; i++) {
w.append("01234567890\n");
}
}
Path dest = dir.resolve("dest.txt");
for (int t = 0; t < 4; t++) {
new Thread(() -> {
try {
Files.copy(source, dest,
StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES);
if (Files.size(source) != Files.size(dest)) {
throw new IOException("Failed to copy full contents
from " + source + " to " + dest);
}
} catch (IOException e) {
throw new IOError(e);
}
}).start();
}
}
```
> Remove dependency on plexus-utils
> ---------------------------------
>
> Key: MNG-7820
> URL: https://issues.apache.org/jira/browse/MNG-7820
> Project: Maven
> Issue Type: Task
> Reporter: Guillaume Nodet
> Priority: Major
> Fix For: 4.0.0-alpha-8
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)