[ 
https://issues.apache.org/jira/browse/MRESOLVER-279?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17619410#comment-17619410
 ] 

ASF GitHub Bot commented on MRESOLVER-279:
------------------------------------------

michael-o commented on code in PR #203:
URL: https://github.com/apache/maven-resolver/pull/203#discussion_r997978146


##########
maven-resolver-util/src/main/java/org/eclipse/aether/util/FileUtils.java:
##########
@@ -0,0 +1,112 @@
+package org.eclipse.aether.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * A utility class to write files.
+ *
+ * @since TBD
+ */
+public final class FileUtils
+{
+    private FileUtils()
+    {
+        // hide constructor
+    }
+
+    /**
+     * A file writer, that accepts a {@link Path} to write some content to.
+     */
+    @FunctionalInterface
+    public interface FileWriter
+    {
+        void write( Path path ) throws IOException;
+    }
+
+    /**
+     * Writes file without backup.
+     *
+     * @param target   that is the target file (must be file, the path must 
have parent).
+     * @param writer   the writer that will accept a {@link Path} to write 
content to.
+     * @throws IOException if at any step IO problem occurs.
+     */
+    public static void writeFile( Path target, FileWriter writer ) throws 
IOException
+    {
+        writeFile( target, writer, false );
+    }
+
+    /**
+     * Writes file with backup copy (appends ".bak" extension).
+     *
+     * @param target   that is the target file (must be file, the path must 
have parent).
+     * @param writer   the writer that will accept a {@link Path} to write 
content to.
+     * @throws IOException if at any step IO problem occurs.
+     */
+    public static void writeFileWithBackup( Path target, FileWriter writer ) 
throws IOException
+    {
+        writeFile( target, writer, true );
+    }
+
+    /**
+     * Utility method to write out file to disk in "atomic" manner, with 
optional backups (".bak") if needed. This
+     * ensures that no other thread or process will be able to read not fully 
written files. Finally, this methos
+     * may create the needed parent directories, if the passed in target 
parents does not exist.
+     *
+     * @param target   that is the target file (must be file, the path must 
have parent).
+     * @param writer   the writer that will accept a {@link Path} to write 
content to.
+     * @param doBackup if {@code true}, and target file is about to be 
overwritten, a ".bak" file with old contents will
+     *                 be created/overwritten.
+     * @throws IOException if at any step IO problem occurs.
+     */
+    private static void writeFile( Path target, FileWriter writer, boolean 
doBackup ) throws IOException
+    {
+        requireNonNull( target, "target is null" );
+        requireNonNull( writer, "writer is null" );
+        Path parent = requireNonNull( target.getParent(), "target must be a 
file" );

Review Comment:
   Ah OK, now this is clear.





> Simplify and improve trusted checksum sources
> ---------------------------------------------
>
>                 Key: MRESOLVER-279
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-279
>             Project: Maven Resolver
>          Issue Type: Task
>          Components: Resolver
>            Reporter: Tamas Cservenak
>            Assignee: Tamas Cservenak
>            Priority: Major
>             Fix For: 1.9.0
>
>
> High level changes:
>  * support class should meddle way less, it is here to provide some utils and 
> protect from future API changes
>  * sparse source: use `FileProcessor` both both, checksum read and write 
> (instead to mix in `Files.write`)
>  * summary source: heavily enhanced, on save it truncate or merges with 
> existing summary file, added change detection (prevents save when no change 
> to save), summary file is written out atomically, and finally file format is 
> made GNU Coreutils formatted, hence is usable with GNU sha1sum and alike OS 
> tools
>  * introduce FileUtils, Java NIO2 based file writing utility
> For both checksum sources the semantics of concurrent lookup/write is cleared 
> up and documented (and fixed in summary). For lookup purposes, the source 
> must be explicitly enabled, while for "recording" this is not needed.
> Tests redone as well, and should work with any writable trusted checksum 
> source.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to