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()); | |||
| } | |||
| } | |||