git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276536 13f79535-47bb-0310-9956-ffa450edef68master
@@ -104,6 +104,8 @@ | |||
Link: ${tdir}/symtest1/symtest2/link3==> | |||
${tdir}/symtest1/symtest2/file2 | |||
Link: ${tdir}/symtest1/dirlink==>${tdir}/symtest1/symtest3 | |||
Link: ${tdir}/symtest1/dirlink2==>${tdir}/symtest1/symtest3 | |||
Link: ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest3 | |||
File: ${tdir}/symtest1/recorded.links | |||
File: ${tdir}/symtest1/symtest2/recorded.links | |||
Deletes: | |||
@@ -134,6 +136,12 @@ | |||
<symlink resource="${tdir}/symtest1/symtest3" | |||
link="${tdir}/symtest1/dirlink" | |||
failonerror="no" /> | |||
<symlink resource="${tdir}/symtest1/symtest3" | |||
link="${tdir}/symtest1/dirlink2" | |||
failonerror="no"/> | |||
<symlink resource="${tdir}/symtest1/symtest3" | |||
link="${tdir}/symtest1/dirlink3" | |||
failonerror="no"/> | |||
<sleep seconds="${delay}"/> <!-- make sure OS has time to catch up --> | |||
@@ -188,6 +196,11 @@ | |||
<available file="${tdir}/symtest1/dirlink" | |||
property="test.record.dirlink.created"/> | |||
<!-- this is redundant for this test, but used in the recreate test --> | |||
<available file="${tdir}/symtest1/dirlink2" | |||
property="test.record.dirlink2.created"/> | |||
<!-- Test to see if the linkfiles were created --> | |||
<available file="${tdir}/symtest1/recorded.links" | |||
@@ -213,14 +226,26 @@ | |||
Link: ${tdir}/symtest1/link2==>${tdir}/symtest1/symtest2/file2 | |||
Link: ${tdir}/symtest1/symtest2/link3==> | |||
${tdir}/symtest1/symtest2/file2 | |||
Link: ${tdir}/sumtest1/dirlink==>${tdir}/symtest1/symtest3 | |||
Link: ${tdir}/symtest1/dirlink==>${tdir}/symtest1/symtest3 | |||
Link: ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest3 | |||
Creates | |||
Link: ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest2 | |||
Recreates: | |||
Link: ${tdir}/symtest1/link1==>${tdir}/symtest1/file1 | |||
Link: ${tdir}/symtest1/link2==>${tdir}/symtest1/symtest2/file2 | |||
Link: ${tdir}/symtest1/symtest2/link3==> | |||
${tdir}/symtest1/symtest2/file2 | |||
Link: ${tdir}/sumtest1/dirlink==>${tdir}/symtest1/symtest3 | |||
Link: ${tdir}/symtest1/dirlink==>${tdir}/symtest1/symtest3 | |||
Should Change: | |||
Link: ${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest2 | |||
to | |||
${tdir}/symtest1/dirlink3==>${tdir}/symtest1/symtest3 | |||
Should Not Create (bug 25181): | |||
Link: ${tdir}/symtest1/symtest3/dirlink2==>${tdir}/symtest1/symtest3 | |||
--> | |||
<target name="test-recreate" depends="test-record"> | |||
@@ -229,6 +254,16 @@ | |||
<symlink action="delete" link="${tdir}/symtest1/link2"/> | |||
<symlink action="delete" link="${tdir}/symtest1/symtest2/link3"/> | |||
<symlink action="delete" link="${tdir}/symtest1/dirlink"/> | |||
<!-- dirlink2 intentionally not deleted to test bug 25181 --> | |||
<symlink action="delete" link="${tdir}/symtest1/dirlink3"/> | |||
<sleep seconds="${delay}"/> <!-- make sure OS has time to catch up --> | |||
<symlink resource="${tdir}/symtest1/symtest2" | |||
link="${tdir}/symtest1/dirlink3" | |||
failonerror="no"/> | |||
<sleep seconds="${delay}"/> <!-- make sure OS has time to catch up --> | |||
<available file="${tdir}/symtest1/link1" | |||
property="test.recreate.link1.not.removed" | |||
@@ -265,6 +300,18 @@ | |||
<available file="${tdir}/symtest1/dirlink" | |||
property="test.recreate.dirlink.recreated"/> | |||
<!-- this should not get set --> | |||
<available file="${tdir}/symtest1/symtest3/symtest3" | |||
property="test.recreate.dirlink2.recreated.twice" | |||
value="ERROR: dirlink2 was created a second time (bug 25181)"/> | |||
<touch file="${tdir}/symtest1/dirlink3/WhereAmI"/> | |||
<sleep seconds="${delay}"/> <!-- make sure OS has time to do the execs --> | |||
<available file="${tdir}/symtest1/symtest3/WhereAmI" | |||
property="test.recreate.dirlink3.was.altered"/> | |||
</target> | |||
@@ -160,7 +160,26 @@ public class Symlink extends Task { | |||
while (keys.hasMoreElements()) { | |||
link = (String) keys.nextElement(); | |||
resource = listOfLinks.getProperty(link); | |||
doLink(resource, link); | |||
// handle the case where the link exists | |||
// and points to a directory (bug 25181) | |||
try { | |||
FileUtils fu = FileUtils.newFileUtils(); | |||
File test = new File(link); | |||
File testRes = new File(resource); | |||
if (!fu.isSymbolicLink(test.getParentFile(), | |||
test.getName())) { | |||
doLink(resource, link); | |||
} else { | |||
if (!test.getCanonicalPath(). | |||
equals(testRes.getCanonicalPath())) { | |||
Symlink.deleteSymlink(link); | |||
doLink(resource,link); | |||
} // else the link exists, do nothing | |||
} | |||
} catch (IOException ioe) { | |||
handleError("IO exception while creating " | |||
+ "link"); | |||
} | |||
} | |||
} else if (action.equals("record")) { | |||
Vector vectOfLinks; | |||
@@ -735,7 +754,6 @@ public class Symlink extends Task { | |||
keys = propTemp.keys(); | |||
propTemp.list(System.out); | |||
// Write the contents to our master list of links | |||
// This method assumes that all links are defined in | |||
// terms of absolute paths, or paths relative to the | |||
// working directory | |||
@@ -47,7 +47,6 @@ public class SymlinkTest extends BuildFileTest { | |||
private Project p; | |||
private boolean supportsSymlinks = Os.isFamily("unix"); | |||
private boolean testfail = false; | |||
public SymlinkTest(String name) { | |||
super(name); | |||
@@ -62,7 +61,6 @@ public class SymlinkTest extends BuildFileTest { | |||
public void testSingle() { | |||
testfail = true; | |||
if (supportsSymlinks) { | |||
executeTarget("test-single"); | |||
p = getProject(); | |||
@@ -71,11 +69,9 @@ public class SymlinkTest extends BuildFileTest { | |||
assertNotNull("Failed to create link", | |||
p.getProperty("test.single.link.created")); | |||
} | |||
testfail = false; | |||
} | |||
public void testDelete() { | |||
testfail = true; | |||
if (supportsSymlinks) { | |||
executeTarget("test-delete"); | |||
p = getProject(); | |||
@@ -86,11 +82,9 @@ public class SymlinkTest extends BuildFileTest { | |||
fail(linkDeleted); | |||
} | |||
} | |||
testfail = false; | |||
} | |||
public void testRecord() { | |||
testfail = true; | |||
if (supportsSymlinks) { | |||
executeTarget("test-record"); | |||
p = getProject(); | |||
@@ -128,6 +122,9 @@ public class SymlinkTest extends BuildFileTest { | |||
assertNotNull("Failed to create dirlink", | |||
p.getProperty("test.record.dirlink.created")); | |||
assertNotNull("Failed to create dirlink2", | |||
p.getProperty("test.record.dirlink2.created")); | |||
assertNotNull("Couldn't record links in dir1", | |||
p.getProperty("test.record.dir1.recorded")); | |||
@@ -141,11 +138,9 @@ public class SymlinkTest extends BuildFileTest { | |||
} | |||
} | |||
testfail = false; | |||
} | |||
public void testRecreate() { | |||
testfail = true; | |||
if (supportsSymlinks) { | |||
executeTarget("test-recreate"); | |||
p = getProject(); | |||
@@ -173,14 +168,21 @@ public class SymlinkTest extends BuildFileTest { | |||
p.getProperty("test.recreate.link3.recreated")); | |||
assertNotNull("Failed to recreate dirlink", | |||
p.getProperty("test.recreate.dirlink.recreated")); | |||
String doubleRecreate = p.getProperty("test.recreate.dirlink2.recreated.twice"); | |||
if (doubleRecreate != null) { | |||
fail(doubleRecreate); | |||
} | |||
assertNotNull("Failed to alter dirlink3", | |||
p.getProperty("test.recreate.dirlink3.was.altered")); | |||
} | |||
testfail = false; | |||
} | |||
public void tearDown() { | |||
if (supportsSymlinks && !testfail) { | |||
executeTarget("teardown"); | |||
} | |||
executeTarget("teardown"); | |||
} | |||
} |