You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by st...@apache.org on 2007/09/19 14:29:40 UTC
svn commit: r577281 - in /ant/core/trunk: WHATSNEW
src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java
src/tests/antunit/taskdefs/optional/unix/
src/tests/antunit/taskdefs/optional/unix/symlink-test.xml
Author: stevel
Date: Wed Sep 19 05:29:39 2007
New Revision: 577281
URL: http://svn.apache.org/viewvc?rev=577281&view=rev
Log:
bugzilla ID 38199, symlink fails on second call
bugzilla ID 43426, <symlink> cant create a symlink over a file
solution is the same: opt for ln -sf after trying to do it internally. We could perhaps drop all ant deletion operations, for a much simpler operation.
Added:
ant/core/trunk/src/tests/antunit/taskdefs/optional/unix/
ant/core/trunk/src/tests/antunit/taskdefs/optional/unix/symlink-test.xml
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java
Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=577281&r1=577280&r2=577281&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Wed Sep 19 05:29:39 2007
@@ -41,6 +41,13 @@
Fixed bugs:
-----------
+ * <symlink> task couldn't overwrite existing symlinks that pointed to nonexistent files
+ Bugzilla report 38199
+
+ * <symlink> task couldn't overwrite files that were in the way of the symlink.
+ Bugzilla report 43426
+
+
Other changes:
--------------
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java?rev=577281&r1=577280&r2=577281&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java Wed Sep 19 05:29:39 2007
@@ -404,7 +404,7 @@
* fail.
*/
public static void deleteSymlink(File linkfil)
- throws IOException, FileNotFoundException {
+ throws IOException{
if (!linkfil.exists()) {
throw new FileNotFoundException("No such symlink: " + linkfil);
}
@@ -466,6 +466,7 @@
*
* @param msg The message to log, or include in the
* <code>BuildException</code>.
+ * @throws BuildException with the message if failonerror=true
*/
private void handleError(String msg) {
if (failonerror) {
@@ -481,20 +482,24 @@
*
* @param res The path of the resource we are linking to.
* @param lnk The name of the link we wish to make.
+ * @throws BuildException when things go wrong
*/
private void doLink(String res, String lnk) throws BuildException {
File linkfil = new File(lnk);
- if (overwrite && linkfil.exists()) {
- try {
- deleteSymlink(linkfil);
- } catch (FileNotFoundException fnfe) {
- handleError("Symlink disappeared before it was deleted: " + lnk);
- } catch (IOException ioe) {
- handleError("Unable to overwrite preexisting link: " + lnk);
+ String options = "-s";
+ if (overwrite) {
+ options += "f";
+ if (linkfil.exists()) {
+ try {
+ deleteSymlink(linkfil);
+ } catch (FileNotFoundException fnfe) {
+ log("Symlink disappeared before it was deleted: " + lnk);
+ } catch (IOException ioe) {
+ log("Unable to overwrite preexisting link or file: " + lnk,ioe, Project.MSG_INFO);
+ }
}
}
- String[] cmd = new String[] {"ln", "-s", res, lnk};
- log(Commandline.toString(cmd));
+ String[] cmd = new String[] {"ln", options, res, lnk};
Execute.runCommand(this, cmd);
}
Added: ant/core/trunk/src/tests/antunit/taskdefs/optional/unix/symlink-test.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/optional/unix/symlink-test.xml?rev=577281&view=auto
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/optional/unix/symlink-test.xml (added)
+++ ant/core/trunk/src/tests/antunit/taskdefs/optional/unix/symlink-test.xml Wed Sep 19 05:29:39 2007
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project name="symlink-test"
+ default="antunit" xmlns:au="antlib:org.apache.ant.antunit">
+ <import file="../../../antunit-base.xml"/>
+
+ <property name="build.dir" location="build" />
+
+ <target name="setUp">
+ <condition property="isUnix">
+ <os family="unix" />
+ </condition>
+ </target>
+
+ <target name="os">
+
+ <mkdir dir="${build.dir}" />
+ <condition property="unix">
+ <os family="unix" />
+ </condition>
+ <property name="file_ref"
+ location="${build.dir}/file"/>
+ <property name="hanging_ref"
+ location="${build.dir}/hanging_ref"/>
+ </target>
+
+ <target name="init" depends="os" if="unix">
+ <touch file="${file_ref}" />
+ </target>
+
+ <target name="tearDown">
+ <delete dir="${build.dir}" />
+ </target>
+
+ <target name="testCreateDouble" depends="init" if="unix">
+ <symlink overwrite="true" link="${build.dir}/link"
+ resource="${file_ref}"/>
+ <symlink overwrite="true" link="${build.dir}/link"
+ resource="${file_ref}"/>
+ </target>
+
+
+ <target name="testCreateDoubleHanging" depends="init" if="unix">
+ <symlink overwrite="true" link="${build.dir}/link2"
+ resource="${hanging_ref}"/>
+ <symlink overwrite="true" link="${build.dir}/link2"
+ resource="${hanging_ref}"/>
+ </target>
+
+ <target name="testCreateOverFile" depends="init" if="unix">
+ <touch file="${build.dir}/link3" />
+ <symlink overwrite="true" link="${build.dir}/link3"
+ resource="${file_ref}"/>
+ </target>
+
+</project>
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org