[ 
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)

Reply via email to