This is an automated email from the ASF dual-hosted git repository. sebb pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-io.git
The following commit(s) were added to refs/heads/master by this push: new 291a35e IO-672 - FileCopy sets date to 01 Jan 1970 291a35e is described below commit 291a35ef8be015be252664e2cbde0af741cd82f1 Author: Sebb <s...@apache.org> AuthorDate: Fri Aug 7 00:27:32 2020 +0100 IO-672 - FileCopy sets date to 01 Jan 1970 --- src/changes/changes.xml | 5 +++- src/main/java/org/apache/commons/io/FileUtils.java | 6 ++-- .../org/apache/commons/io/FileUtilsTestCase.java | 33 +++++++++++----------- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 6fcb369..df461c5 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -116,9 +116,12 @@ The <action> type attribute can be add,update,fix,remove. <action dev="ggregory" type="update" due-to="Dependabot"> Update spotbugs from 4.0.6 to 4.1.1 #134. </action> - <action dev="sebb" type="add"> + <action issue="IO-681" dev="sebb" type="add"> IO-681 IOUtils.close(Closeable) should allow a list of closeables </action> + <action issue="IO-672" dev="sebb" type="fix"> + Copying a File sets last modified date to 01 January 1970 + </action> </release> <!-- The release date is the date RC is cut --> <release version="2.7" date="2020-05-24" description="Java 8 required."> diff --git a/src/main/java/org/apache/commons/io/FileUtils.java b/src/main/java/org/apache/commons/io/FileUtils.java index 1586ead..7bee5bf 100644 --- a/src/main/java/org/apache/commons/io/FileUtils.java +++ b/src/main/java/org/apache/commons/io/FileUtils.java @@ -1394,7 +1394,6 @@ public class FileUtils { final Path srcPath = srcFile.toPath(); final Path destPath = destFile.toPath(); - final long newLastModifed = preserveFileDate ? srcFile.lastModified() : destFile.lastModified(); Files.copy(srcPath, destPath, copyOptions); // TODO IO-386: Do we still need this check? @@ -1402,7 +1401,10 @@ public class FileUtils { // TODO IO-386: Do we still need this check? checkEqualSizes(srcFile, destFile, srcFile.length(), destFile.length()); - return destFile.setLastModified(newLastModifed); + if (preserveFileDate) { + return destFile.setLastModified(srcFile.lastModified()); + } + return true; } //----------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/io/FileUtilsTestCase.java b/src/test/java/org/apache/commons/io/FileUtilsTestCase.java index 95f5343..92bddba 100644 --- a/src/test/java/org/apache/commons/io/FileUtilsTestCase.java +++ b/src/test/java/org/apache/commons/io/FileUtilsTestCase.java @@ -19,6 +19,7 @@ package org.apache.commons.io; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; @@ -1144,16 +1145,12 @@ public class FileUtilsTestCase { public void testCopyFile1() throws Exception { final File destination = new File(temporaryFolder, "copy1.txt"); - //Thread.sleep(LAST_MODIFIED_DELAY); - //This is to slow things down so we can catch if - //the lastModified date is not ok + backDateFile(testFile1); // set test file back 10 minutes FileUtils.copyFile(testFile1, destination); assertTrue(destination.exists(), "Check Exist"); assertEquals(testFile1Size, destination.length(), "Check Full copy"); - /* disabled: Thread.sleep doesn't work reliantly for this case - assertTrue("Check last modified date preserved", - testFile1.lastModified() == destination.lastModified());*/ + assertEquals(testFile1.lastModified(), destination.lastModified(), "Check last modified date preserved"); } @Test @@ -1196,15 +1193,12 @@ public class FileUtilsTestCase { public void testCopyFile2() throws Exception { final File destination = new File(temporaryFolder, "copy2.txt"); - //Thread.sleep(LAST_MODIFIED_DELAY); - //This is to slow things down so we can catch if - //the lastModified date is not ok + backDateFile(testFile1); // set test file back 10 minutes FileUtils.copyFile(testFile1, destination); assertTrue(destination.exists(), "Check Exist"); assertEquals(testFile2Size, destination.length(), "Check Full copy"); - /* disabled: Thread.sleep doesn't work reliably for this case - assertTrue(testFile1.lastModified() == destination.lastModified(), "Check last modified date preserved");*/ + assertEquals(testFile1.lastModified() , destination.lastModified(), "Check last modified date preserved"); } @Test @@ -1225,16 +1219,15 @@ public class FileUtilsTestCase { public void testCopyFile2WithoutFileDatePreservation() throws Exception { final File destination = new File(temporaryFolder, "copy2.txt"); - //Thread.sleep(LAST_MODIFIED_DELAY); - //This is to slow things down so we can catch if - //the lastModified date is not ok + backDateFile(testFile1); // set test file back 10 minutes + final long now = new Date().getTime()-1000L; // destination file time should not be less than this (allowing for granularity) FileUtils.copyFile(testFile1, destination, false); assertTrue(destination.exists(), "Check Exist"); assertEquals(testFile2Size, destination.length(), "Check Full copy"); - /* disabled: Thread.sleep doesn't work reliantly for this case - assertTrue("Check last modified date modified", - testFile1.lastModified() != destination.lastModified());*/ + final long destLastMod = destination.lastModified(); + assertNotEquals(testFile1.lastModified(), destLastMod, "Check last modified date not same as input"); + assertTrue(destLastMod > now, destLastMod + " > " + now); } @Test @@ -3083,6 +3076,12 @@ public class FileUtilsTestCase { } } + private void backDateFile(File testFile){ + final long mins10 = 1000*60*10; + final long lastModified1 = testFile.lastModified(); + testFile.setLastModified(lastModified1-mins10); + assertNotEquals(testFile.lastModified(), lastModified1, "Should have changed source date"); // ensure it was changed + } /** * DirectoryWalker implementation that recursively lists all files and directories. */