|
|
@@ -263,9 +263,9 @@ public class Copy extends Task { |
|
|
|
* If false, note errors to the output but keep going. |
|
|
|
* @param failonerror true or false |
|
|
|
*/ |
|
|
|
public void setFailOnError(boolean failonerror) { |
|
|
|
this.failonerror = failonerror; |
|
|
|
} |
|
|
|
public void setFailOnError(boolean failonerror) { |
|
|
|
this.failonerror = failonerror; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Adds a set of files to copy. |
|
|
@@ -374,7 +374,19 @@ public class Copy extends Task { |
|
|
|
// deal with the filesets |
|
|
|
for (int i = 0; i < filesets.size(); i++) { |
|
|
|
FileSet fs = (FileSet) filesets.elementAt(i); |
|
|
|
DirectoryScanner ds = fs.getDirectoryScanner(getProject()); |
|
|
|
DirectoryScanner ds = null; |
|
|
|
try { |
|
|
|
ds = fs.getDirectoryScanner(getProject()); |
|
|
|
} catch (BuildException e) { |
|
|
|
if (failonerror |
|
|
|
|| !e.getMessage().endsWith(" not found.")) { |
|
|
|
throw e; |
|
|
|
} else { |
|
|
|
log("Warning: " + e.getMessage()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
File fromDir = fs.getDir(getProject()); |
|
|
|
|
|
|
|
String[] srcFiles = ds.getIncludedFiles(); |
|
|
@@ -405,66 +417,66 @@ public class Copy extends Task { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//************************************************************************ |
|
|
|
// protected and private methods |
|
|
|
//************************************************************************ |
|
|
|
|
|
|
|
/** |
|
|
|
* Ensure we have a consistent and legal set of attributes, and set |
|
|
|
* any internal flags necessary based on different combinations |
|
|
|
* of attributes. |
|
|
|
*/ |
|
|
|
protected void validateAttributes() throws BuildException { |
|
|
|
if (file == null && filesets.size() == 0) { |
|
|
|
throw new BuildException("Specify at least one source " |
|
|
|
+ "- a file or a fileset."); |
|
|
|
} |
|
|
|
|
|
|
|
if (destFile != null && destDir != null) { |
|
|
|
throw new BuildException("Only one of tofile and todir " |
|
|
|
+ "may be set."); |
|
|
|
} |
|
|
|
//************************************************************************ |
|
|
|
// protected and private methods |
|
|
|
//************************************************************************ |
|
|
|
|
|
|
|
/** |
|
|
|
* Ensure we have a consistent and legal set of attributes, and set |
|
|
|
* any internal flags necessary based on different combinations |
|
|
|
* of attributes. |
|
|
|
*/ |
|
|
|
protected void validateAttributes() throws BuildException { |
|
|
|
if (file == null && filesets.size() == 0) { |
|
|
|
throw new BuildException("Specify at least one source " |
|
|
|
+ "- a file or a fileset."); |
|
|
|
} |
|
|
|
|
|
|
|
if (destFile == null && destDir == null) { |
|
|
|
throw new BuildException("One of tofile or todir must be set."); |
|
|
|
} |
|
|
|
if (destFile != null && destDir != null) { |
|
|
|
throw new BuildException("Only one of tofile and todir " |
|
|
|
+ "may be set."); |
|
|
|
} |
|
|
|
|
|
|
|
if (file != null && file.exists() && file.isDirectory()) { |
|
|
|
throw new BuildException("Use a fileset to copy directories."); |
|
|
|
} |
|
|
|
if (destFile == null && destDir == null) { |
|
|
|
throw new BuildException("One of tofile or todir must be set."); |
|
|
|
} |
|
|
|
|
|
|
|
if (destFile != null && filesets.size() > 0) { |
|
|
|
if (filesets.size() > 1) { |
|
|
|
throw new BuildException( |
|
|
|
"Cannot concatenate multiple files into a single file."); |
|
|
|
} else { |
|
|
|
FileSet fs = (FileSet) filesets.elementAt(0); |
|
|
|
DirectoryScanner ds = fs.getDirectoryScanner(getProject()); |
|
|
|
String[] srcFiles = ds.getIncludedFiles(); |
|
|
|
if (file != null && file.exists() && file.isDirectory()) { |
|
|
|
throw new BuildException("Use a fileset to copy directories."); |
|
|
|
} |
|
|
|
|
|
|
|
if (srcFiles.length == 0) { |
|
|
|
if (destFile != null && filesets.size() > 0) { |
|
|
|
if (filesets.size() > 1) { |
|
|
|
throw new BuildException( |
|
|
|
"Cannot perform operation from directory to file."); |
|
|
|
} else if (srcFiles.length == 1) { |
|
|
|
if (file == null) { |
|
|
|
file = new File(ds.getBasedir(), srcFiles[0]); |
|
|
|
filesets.removeElementAt(0); |
|
|
|
"Cannot concatenate multiple files into a single file."); |
|
|
|
} else { |
|
|
|
FileSet fs = (FileSet) filesets.elementAt(0); |
|
|
|
DirectoryScanner ds = fs.getDirectoryScanner(getProject()); |
|
|
|
String[] srcFiles = ds.getIncludedFiles(); |
|
|
|
|
|
|
|
if (srcFiles.length == 0) { |
|
|
|
throw new BuildException( |
|
|
|
"Cannot perform operation from directory to file."); |
|
|
|
} else if (srcFiles.length == 1) { |
|
|
|
if (file == null) { |
|
|
|
file = new File(ds.getBasedir(), srcFiles[0]); |
|
|
|
filesets.removeElementAt(0); |
|
|
|
} else { |
|
|
|
throw new BuildException("Cannot concatenate multiple " |
|
|
|
+ "files into a single file."); |
|
|
|
} |
|
|
|
} else { |
|
|
|
throw new BuildException("Cannot concatenate multiple " |
|
|
|
+ "files into a single file."); |
|
|
|
} |
|
|
|
} else { |
|
|
|
throw new BuildException("Cannot concatenate multiple " |
|
|
|
+ "files into a single file."); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (destFile != null) { |
|
|
|
destDir = fileUtils.getParentFile(destFile); |
|
|
|
} |
|
|
|
if (destFile != null) { |
|
|
|
destDir = fileUtils.getParentFile(destFile); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Compares source files to destination files to see if they should be |
|
|
|