diff --git a/changelog.html b/changelog.html index 7ed6c4a9527e7a91fd0750aee1ffd8b97a9e5a19..66b6e321f661fc0ad2e82ef40438712b70995d2f 100644 --- a/changelog.html +++ b/changelog.html @@ -55,7 +55,9 @@ Upcoming changes diff --git a/core/src/main/java/hudson/FilePath.java b/core/src/main/java/hudson/FilePath.java index 5a9419c7fec30a0b58c6e8a9d7670cc52a30ede6..5e6c6445a4d3fabcd343ace47875e90e78dfe1ad 100644 --- a/core/src/main/java/hudson/FilePath.java +++ b/core/src/main/java/hudson/FilePath.java @@ -1812,12 +1812,12 @@ public final class FilePath implements Serializable { new FilePath(f).symlinkTo(te.getLinkName(), TaskListener.NULL); } else { IOUtils.copy(t,f); + + f.setLastModified(te.getModTime().getTime()); + int mode = te.getMode()&0777; + if(mode!=0 && !Functions.isWindows()) // be defensive + _chmod(f,mode); } - - f.setLastModified(te.getModTime().getTime()); - int mode = te.getMode()&0777; - if(mode!=0 && !Functions.isWindows()) // be defensive - _chmod(f,mode); } } } catch(IOException e) { diff --git a/core/src/test/java/hudson/FilePathTest.java b/core/src/test/java/hudson/FilePathTest.java index b6592f378043321b9944528107b8ca5c4040990a..3337afa5dfe6a5e5cfe294abbd139a02532a4f58 100644 --- a/core/src/test/java/hudson/FilePathTest.java +++ b/core/src/test/java/hudson/FilePathTest.java @@ -365,8 +365,8 @@ public class FilePathTest extends ChannelTestCase { try { FilePath in = tmp.child("in"); in.mkdirs(); - in.child("a").touch(0); - in.child("b").symlinkTo("a", TaskListener.NULL); + in.child("c").touch(0); + in.child("b").symlinkTo("c", TaskListener.NULL); FilePath tar = tmp.child("test.tar"); in.tar(tar.write(), "**/*"); @@ -374,7 +374,7 @@ public class FilePathTest extends ChannelTestCase { FilePath dst = in.child("dst"); tar.untar(dst, TarCompression.NONE); - assertEquals("a",dst.child("b").readLink()); + assertEquals("c",dst.child("b").readLink()); } finally { tmp.deleteRecursive(); }