Skip to content

Commit 442b63e

Browse files
authored
[MSHARED-1330] Always overwrite files (#97)
1 parent ae1842f commit 442b63e

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import java.nio.charset.Charset;
2727
import java.nio.file.Files;
2828
import java.nio.file.NoSuchFileException;
29+
import java.nio.file.attribute.PosixFilePermission;
30+
import java.util.EnumSet;
2931
import java.util.StringTokenizer;
3032
import java.util.regex.Pattern;
3133

@@ -305,6 +307,8 @@ static boolean isEmpty(final String string) {
305307
* @throws IOException if an IO error occurs during copying or filtering
306308
*/
307309
public static void copyFile(File from, File to, String encoding, FilterWrapper[] wrappers) throws IOException {
310+
setReadWritePermissions(to);
311+
308312
if (wrappers == null || wrappers.length == 0) {
309313
try (OutputStream os = new CachingOutputStream(to.toPath())) {
310314
Files.copy(from.toPath(), os);
@@ -371,6 +375,23 @@ private static void copyFilePermissions(File source, File destination) throws IO
371375
}
372376
}
373377

378+
@SuppressWarnings("ResultOfMethodCallIgnored")
379+
private static void setReadWritePermissions(File file) throws IOException {
380+
if (file.exists()) {
381+
try {
382+
Files.setPosixFilePermissions(
383+
file.toPath(),
384+
EnumSet.of(
385+
PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE,
386+
PosixFilePermission.GROUP_READ, PosixFilePermission.GROUP_WRITE,
387+
PosixFilePermission.OTHERS_READ, PosixFilePermission.OTHERS_WRITE));
388+
} catch (UnsupportedOperationException e) {
389+
file.setReadable(true);
390+
file.setWritable(true);
391+
}
392+
}
393+
}
394+
374395
private static Charset charset(String encoding) {
375396
if (encoding == null || encoding.isEmpty()) {
376397
return Charset.defaultCharset();

src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
3232
import static org.junit.jupiter.api.Assertions.assertEquals;
33+
import static org.junit.jupiter.api.Assertions.assertFalse;
3334

3435
/**
3536
* @author John Casey
@@ -148,4 +149,20 @@ void escapeWindowsPathNotAtBeginning() throws Exception {
148149
"jdbc:derby:C:\\\\Users\\\\Administrator/test;create=true",
149150
FilteringUtils.escapeWindowsPath("jdbc:derby:C:\\Users\\Administrator/test;create=true"));
150151
}
152+
153+
// MSHARED-1330
154+
@Test
155+
void copyReadOnlyFileTwice() throws Exception {
156+
File temp = File.createTempFile("pre-", ".txt");
157+
temp.setReadOnly();
158+
159+
File out = File.createTempFile("out-", ".txt");
160+
out.delete();
161+
162+
FilteringUtils.copyFile(temp, out, "UTF-8", new FilterWrapper[0]);
163+
assertFalse(out.canWrite());
164+
165+
FilteringUtils.copyFile(temp, out, "UTF-8", new FilterWrapper[0]);
166+
assertFalse(out.canWrite());
167+
}
151168
}

0 commit comments

Comments
 (0)