Move tasks. Now you can only copy or move entire directories with nested FileSets. Prompted by a patch submitted by Nico Seessle. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268061 13f79535-47bb-0310-9956-ffa450edef68master
@@ -136,7 +136,9 @@ | |||
<!-- =================================================================== --> | |||
<target name="main" depends="jar" description="Creates the binary structure"> | |||
<mkdir dir="${bin.dir}"/> | |||
<copy dir="${src.bin.dir}" todir="${bin.dir}"/> | |||
<copy todir="${bin.dir}"> | |||
<fileset dir="${src.bin.dir}"/> | |||
</copy> | |||
<chmod perm="+x"> | |||
<fileset dir="${bin.dir}"> | |||
<patternset refid="chmod.patterns"/> | |||
@@ -173,13 +175,23 @@ | |||
<mkdir dir="${ant.dist.dir}/docs/api"/> | |||
<mkdir dir="${ant.dist.dir}/src"/> | |||
<copy dir="${src.dir}" todir="${ant.dist.dir}/src"/> | |||
<copy dir="${lib.dir}" todir="${ant.dist.dir}/lib"/> | |||
<copy todir="${ant.dist.dir}/src"> | |||
<fileset dir="${src.dir}"/> | |||
</copy> | |||
<copy todir="${ant.dist.dir}/lib"> | |||
<fileset dir="${lib.dir}"/> | |||
</copy> | |||
<copy file="build.xml" tofile="${ant.dist.dir}/lib/build.xml"/> | |||
<copy dir="src/bin" todir="${ant.dist.dir}/bin"/> | |||
<copy dir="${docs.dir}" todir="${ant.dist.dir}/docs"/> | |||
<copy dir="${build.javadocs}" todir="${ant.dist.dir}/docs/api"/> | |||
<copy todir="${ant.dist.dir}/bin"> | |||
<fileset dir="src/bin"/> | |||
</copy> | |||
<copy todir="${ant.dist.dir}/docs"> | |||
<fileset dir="${docs.dir}"/> | |||
</copy> | |||
<copy todir="${ant.dist.dir}/docs/api"> | |||
<fileset dir="${build.javadocs}"/> | |||
</copy> | |||
<fixcrlf srcdir="${ant.dist.dir}/bin" includes="ant,antRun" cr="remove"/> | |||
<fixcrlf srcdir="${ant.dist.dir}/bin" includes="*.bat" cr="add"/> | |||
@@ -215,14 +227,20 @@ | |||
<!-- =================================================================== --> | |||
<target name="bootstrap" depends="main" description="Installs the ant.jar library and binary files into ant.home"> | |||
<echo message="copying bootstrapped files into bin and lib"/> | |||
<copy dir="${lib.dir}" todir="lib"/> | |||
<copy dir="${bin.dir}" todir="bin"/> | |||
<copy todir="lib"> | |||
<fileset dir="${lib.dir}"/> | |||
</copy> | |||
<copy todir="bin"> | |||
<fileset dir="${bin.dir}"/> | |||
</copy> | |||
</target> | |||
<target name="install" depends="dist" if="ant.install"> | |||
<echo message="installing full copy of ant into ${ant.install}"/> | |||
<mkdir dir="${ant.install}"/> | |||
<copy dir="${ant.dist.dir}" todir="${ant.install}"/> | |||
<copy todir="${ant.install}"> | |||
<fileset dir="${ant.dist.dir}"/> | |||
</copy> | |||
<chmod perm="+x"> | |||
<fileset dir="${ant.install}/bin"> | |||
<patternset refid="chmod.patterns"/> | |||
@@ -235,8 +253,12 @@ | |||
<target name="mininstall" depends="main" if="ant.install"> | |||
<echo message="copy minimal ant installation into ${ant.install}"/> | |||
<mkdir dir="${ant.install}"/> | |||
<copy dir="${lib.dir}" todir="${ant.install}/lib"/> | |||
<copy dir="${bin.dir}" todir="${ant.install}/bin"/> | |||
<copy todir="${ant.install}/lib"> | |||
<fileset dir="${lib.dir}"/> | |||
</copy> | |||
<copy todir="${ant.install}/bin"> | |||
<fileset dir="${bin.dir}"/> | |||
</copy> | |||
<chmod perm="+x"> | |||
<fileset dir="${ant.install}/bin"> | |||
<patternset refid="chmod.patterns"/> | |||
@@ -1176,7 +1176,7 @@ permissions.</p> | |||
<hr> | |||
<h2><a name="copy">Copy</a></h2> | |||
<h3>Description</h3> | |||
<p>Copies a file or directory to a new file or directory. Files are | |||
<p>Copies a file or Fileset to a new file or directory. Files are | |||
only copied if the source file is newer than the destination file, | |||
or when the destination file does not exist. However, you can explicitly | |||
overwrite files with the <var>overwrite</var> attribute.</p> | |||
@@ -1192,19 +1192,15 @@ To use a fileset, the <var>todir</var> attribute must be set.</p> | |||
<tr> | |||
<td valign="top">file</td> | |||
<td valign="top">the file to copy</td> | |||
<td valign="top" align="center" rowspan="2">One of <var>file</var> or | |||
<var>dir</var> are required, or at least one nested fileset element.</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">dir</td> | |||
<td valign="top">the directory to copy</td> | |||
<td valign="top" align="center">One of either <var>file</var> or | |||
at least one nested fileset element.</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">tofile</td> | |||
<td valign="top">the file to copy to</td> | |||
<td valign="top" align="center" rowspan="2">With the <var>file</var> attribute, | |||
either <var>tofile</var> or <var>todir</var> can be used. With the <var>dir</var> | |||
attribute and nested filesets, only <var>todir</var> is allowed.</td> | |||
either <var>tofile</var> or <var>todir</var> can be used. With nested filesets, | |||
only <var>todir</var> is allowed.</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">todir</td> | |||
@@ -1241,7 +1237,9 @@ To use a fileset, the <var>todir</var> attribute must be set.</p> | |||
</pre> | |||
<p><b>Copy a directory to another directory</b></p> | |||
<pre> | |||
<copy dir="src_dir" todir="../new/dir" /> | |||
<copy todir="../new/dir"> | |||
<fileset dir="src_dir"/> | |||
</copy> | |||
</pre> | |||
<p><b>Copy a set of files to a directory</b></p> | |||
<pre> | |||
@@ -74,7 +74,6 @@ import java.util.*; | |||
*/ | |||
public class Copy extends Task { | |||
protected File file = null; // the source file | |||
protected File dir = null; // the source directory | |||
protected File destFile = null; // the destination file | |||
protected File destDir = null; // the destination directory | |||
protected Vector filesets = new Vector(); | |||
@@ -93,13 +92,6 @@ public class Copy extends Task { | |||
this.file = file; | |||
} | |||
/** | |||
* Sets a directory to copy. | |||
*/ | |||
public void setDir(File dir) { | |||
this.dir = dir; | |||
} | |||
/** | |||
* Sets the destination file. | |||
*/ | |||
@@ -176,16 +168,6 @@ public class Copy extends Task { | |||
} | |||
} | |||
// deal with the directory | |||
if (dir != null) { | |||
DirectoryScanner ds = new DirectoryScanner(); | |||
ds.setBasedir(dir); | |||
ds.scan(); // include EVERYTHING | |||
String[] srcFiles = ds.getIncludedFiles(); | |||
scan(dir, destDir, srcFiles); // add to fileCopyMap | |||
} | |||
// deal with the filesets | |||
for (int i=0; i<filesets.size(); i++) { | |||
FileSet fs = (FileSet) filesets.elementAt(i); | |||
@@ -209,8 +191,8 @@ public class Copy extends Task { | |||
* of attributes. | |||
*/ | |||
protected void validateAttributes() throws BuildException { | |||
if (file == null && dir == null && filesets.size() == 0) { | |||
throw new BuildException("Specify at least one source - a file, a dir, or a fileset."); | |||
if (file == null && filesets.size() == 0) { | |||
throw new BuildException("Specify at least one source - a file or a fileset."); | |||
} | |||
if (destFile != null && destDir != null) { | |||
@@ -221,8 +203,8 @@ public class Copy extends Task { | |||
throw new BuildException("One of destfile or destdir must be set."); | |||
} | |||
if (dir != null && destFile != null) { | |||
throw new BuildException("Cannot copy a directory into a file."); | |||
if (file != null && destFile != null && file.exists() && file.isDirectory()) { | |||
throw new BuildException("Use the dir attribute to copy directories."); | |||
} | |||
if (destFile != null && filesets.size() > 0) { | |||
@@ -86,11 +86,6 @@ public class Move extends Copy { | |||
public void execute() throws BuildException { | |||
super.execute(); | |||
// take care of the source directory | |||
if (dir != null && dir.exists()) { | |||
deleteDir(dir); | |||
} | |||
} | |||
//************************************************************************ | |||
@@ -139,7 +134,7 @@ public class Move extends Copy { | |||
} | |||
log("Deleting directory " + d.getAbsolutePath(), verbosity); | |||
if (!d.delete()) { | |||
throw new BuildException("Unable to delete directory " + dir.getAbsolutePath()); | |||
throw new BuildException("Unable to delete directory " + d.getAbsolutePath()); | |||
} | |||
} | |||