diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java b/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java index c64b8225d..cf3408ddb 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java @@ -432,9 +432,11 @@ public class Symlink extends DispatchTask { FILE_UTILS.removeLeadingPath(canfil, linkfil)); } + boolean renamedTarget = false; try { try { FILE_UTILS.rename(canfil, temp); + renamedTarget = true; } catch (IOException e) { throw new IOException( "Couldn't rename resource when attempting to delete " @@ -446,6 +448,7 @@ public class Symlink extends DispatchTask { + " (was it a real file? is this not a UNIX system?)"); } } finally { + if (renamedTarget) { // return the resource to its original name: try { FILE_UTILS.rename(temp, canfil); @@ -455,6 +458,7 @@ public class Symlink extends DispatchTask { + "\n THE RESOURCE'S NAME ON DISK HAS " + "BEEN CHANGED BY THIS ERROR!\n"); } + } } }