bodewig 2004/06/07 04:56:01
Modified: src/etc/testcases/taskdefs/optional/unix symlink.xml
src/main/org/apache/tools/ant/taskdefs/optional/unix
Symlink.java
src/testcases/org/apache/tools/ant/taskdefs/optional/unix
SymlinkTest.java
Log:
Tests for bug 25181
Revision Changes Path
1.2 +49 -2 ant/src/etc/testcases/taskdefs/optional/unix/symlink.xml
Index: symlink.xml
===================================================================
RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/optional/unix/symlink.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- symlink.xml 7 Nov 2002 16:52:07 -0000 1.1
+++ symlink.xml 7 Jun 2004 11:56:01 -0000 1.2
@@ -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>
1.18 +21 -3
ant/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java
Index: Symlink.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- Symlink.java 9 Mar 2004 16:48:39 -0000 1.17
+++ Symlink.java 7 Jun 2004 11:56:01 -0000 1.18
@@ -160,7 +160,26 @@
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 @@
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
1.8 +15 -13
ant/src/testcases/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java
Index: SymlinkTest.java
===================================================================
RCS file:
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SymlinkTest.java 9 Mar 2004 16:49:04 -0000 1.7
+++ SymlinkTest.java 7 Jun 2004 11:56:01 -0000 1.8
@@ -47,7 +47,6 @@
private Project p;
private boolean supportsSymlinks = Os.isFamily("unix");
- private boolean testfail = false;
public SymlinkTest(String name) {
super(name);
@@ -62,7 +61,6 @@
public void testSingle() {
- testfail = true;
if (supportsSymlinks) {
executeTarget("test-single");
p = getProject();
@@ -71,11 +69,9 @@
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 @@
fail(linkDeleted);
}
}
- testfail = false;
}
public void testRecord() {
- testfail = true;
if (supportsSymlinks) {
executeTarget("test-record");
p = getProject();
@@ -128,6 +122,9 @@
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 @@
}
}
- testfail = false;
}
public void testRecreate() {
- testfail = true;
if (supportsSymlinks) {
executeTarget("test-recreate");
p = getProject();
@@ -173,14 +168,21 @@
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");
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]