@@ -118,49 +118,35 @@ public class ExecuteOn extends ExecTask {
protected void runExec(Execute exe) throws BuildException {
try {
Vector v = new Vector();
for (int i=0; i<filesets.size(); i++) {
Vector v = new Vector();
FileSet fs = (FileSet) filesets.elementAt(i);
File base = fs.getDir(project);
DirectoryScanner ds = fs.getDirectoryScanner(project);
if (!"dir".equals(type)) {
String[] s = ds. getIncluded Files();
String[] s = getFiles(base, ds );
for (int j=0; j<s.length; j++) {
v.addElement(new File(fs.getDir(project), s[j]).getAbsolutePath() );
v.addElement(s[j]);
}
}
if (!"file".equals(type)) {
String[] s = ds.getIncludedDirectories() ;
String[] s = getDirs(base, ds); ;
for (int j=0; j<s.length; j++) {
v.addElement(new File(fs.getDir(project), s[j]).getAbsolutePath() );
v.addElement(s[j]);
}
}
}
String[] s = new String[v.size()];
v.copyInto(s);
int err = -1;
if (parallel) {
String[] command = getCommandline(s);
log("Executing " + Commandline.toString(command), Project.MSG_VERBOSE);
exe.setCommandline(command);
err = exe.execute();
if (err != 0) {
if (failOnError) {
throw new BuildException("Exec returned: "+err,
location);
} else {
log("Result: " + err, Project.MSG_ERR);
}
}
String[] s = new String[v.size()];
v.copyInto(s);
} else {
for (int i=0; i<s.length; i++) {
String[] command = getCommandline(s[i]);
log("Executing " + Commandline.toString(command), Project.MSG_VERBOSE);
int err = -1;
if (parallel) {
String[] command = getCommandline(s, base);
log("Executing " + Commandline.toString(command),
Project.MSG_VERBOSE);
exe.setCommandline(command);
err = exe.execute();
if (err != 0) {
@@ -171,6 +157,23 @@ public class ExecuteOn extends ExecTask {
log("Result: " + err, Project.MSG_ERR);
}
}
} else {
for (int j=0; j<s.length; j++) {
String[] command = getCommandline(s[j], base);
log("Executing " + Commandline.toString(command),
Project.MSG_VERBOSE);
exe.setCommandline(command);
err = exe.execute();
if (err != 0) {
if (failOnError) {
throw new BuildException("Exec returned: "+err,
location);
} else {
log("Result: " + err, Project.MSG_ERR);
}
}
}
}
}
@@ -186,8 +189,9 @@ public class ExecuteOn extends ExecTask {
* Construct the command line for parallel execution.
*
* @param srcFiles The filenames to add to the commandline
* @param baseDir filenames are relative to this dir
*/
protected String[] getCommandline(String[] srcFiles) {
protected String[] getCommandline(String[] srcFiles, File baseDir ) {
String[] orig = cmdl.getCommandline();
String[] result = new String[orig.length+srcFiles.length];
@@ -196,7 +200,11 @@ public class ExecuteOn extends ExecTask {
index = srcFilePos.getPosition();
}
System.arraycopy(orig, 0, result, 0, index);
System.arraycopy(srcFiles, 0, result, index, srcFiles.length);
for (int i=0; i < srcFiles.length; i++) {
result[index+i] = (new File(baseDir, srcFiles[i])).getAbsolutePath();
}
System.arraycopy(orig, index, result, index+srcFiles.length,
orig.length-index);
return result;
@@ -206,9 +214,26 @@ public class ExecuteOn extends ExecTask {
* Construct the command line for serial execution.
*
* @param srcFile The filename to add to the commandline
* @param baseDir filename is relative to this dir
*/
protected String[] getCommandline(String srcFile) {
return getCommandline(new String[] {srcFile});
protected String[] getCommandline(String srcFile, File baseDir) {
return getCommandline(new String[] {srcFile}, baseDir);
}
/**
* Return the list of files from this DirectoryScanner that should
* be included on the command line.
*/
protected String[] getFiles(File basedir, DirectoryScanner ds) {
return ds.getIncludedFiles();
}
/**
* Return the list of Directories from this DirectoryScanner that
* should be included on the command line.
*/
protected String[] getDirs(File basedir, DirectoryScanner ds) {
return ds.getIncludedDirectories();
}
/**
@@ -220,5 +245,4 @@ public class ExecuteOn extends ExecTask {
return new String[] {"file", "dir", "both"};
}
}
}