[
https://issues.apache.org/jira/browse/MRESOLVER-279?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17619392#comment-17619392
]
ASF GitHub Bot commented on MRESOLVER-279:
------------------------------------------
cstamas commented on code in PR #203:
URL: https://github.com/apache/maven-resolver/pull/203#discussion_r997963599
##########
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:
https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html#getParent--
On unix, "/foo" has a parent "/" while "/" has no parent (null is returned).
Unsure what happens on non-OSes though. Point here is to not use this method
with `target="/"` but only `target="/foo"`, that target path must have parent.
> 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
> 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)