Browse Source

Don't tell people we'd execute a given command line when we really do

something completely different.

I hope this will cut down the "Ant swallows my quotes" reports to
those that are real problems in Ant and not just problems of
communication.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272573 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 23 years ago
parent
commit
233ae85c5f
29 changed files with 220 additions and 64 deletions
  1. +22
    -8
      src/main/org/apache/tools/ant/DefaultLogger.java
  2. +4
    -9
      src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java
  3. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/ExecTask.java
  4. +8
    -5
      src/main/org/apache/tools/ant/taskdefs/Execute.java
  5. +2
    -3
      src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
  6. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/Java.java
  7. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Javadoc.java
  8. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
  9. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
  10. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/Javah.java
  11. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java
  12. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCreateTask.java
  13. +7
    -7
      src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java
  14. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java
  15. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java
  16. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
  17. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java
  18. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/DefaultJspCompilerAdapter.java
  19. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  20. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
  21. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
  22. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Base.java
  23. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java
  24. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovMerge.java
  25. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovReport.java
  26. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Coverage.java
  27. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
  28. +125
    -4
      src/main/org/apache/tools/ant/types/Commandline.java
  29. +23
    -0
      src/main/org/apache/tools/ant/types/CommandlineJava.java

+ 22
- 8
src/main/org/apache/tools/ant/DefaultLogger.java View File

@@ -55,6 +55,7 @@
package org.apache.tools.ant;

import java.io.PrintStream;
import java.util.StringTokenizer;

import org.apache.tools.ant.util.StringUtils;
import org.apache.tools.ant.util.DateUtils;
@@ -248,21 +249,34 @@ public class DefaultLogger implements BuildLogger {
if (priority <= msgOutputLevel) {

StringBuffer message = new StringBuffer();
// Print out the name of the task if we're in one
if (event.getTask() != null) {
if (event.getTask() != null && !emacsMode) {
// Print out the name of the task if we're in one
String name = event.getTask().getTaskName();
String label = "[" + name + "] ";
int size = LEFT_COLUMN_SIZE - label.length();
StringBuffer tmp = new StringBuffer(size);
for (int i = 0; i < size; i++) {
tmp.append(" ");
}
tmp.append(label);
label = tmp.toString();

if (!emacsMode) {
String label = "[" + name + "] ";
int size = LEFT_COLUMN_SIZE - label.length();
for (int i = 0; i < size; i++) {
message.append(" ");
StringTokenizer tok = new StringTokenizer(event.getMessage(),
"\r\n", false);
boolean first = true;
while (tok.hasMoreTokens()) {
if (!first) {
message.append(StringUtils.LINE_SEP);
}
first = false;
message.append(label);
message.append(tok.nextToken());
}

} else {
message.append(event.getMessage());
}

message.append(event.getMessage());
String msg = message.toString();
if (priority != Project.MSG_ERR) {
printMessage(msg, out, priority);


+ 4
- 9
src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java View File

@@ -321,8 +321,7 @@ public abstract class AbstractCvsTask extends Task {

try {
String actualCommandLine = executeToString(exe);
log("running cvs command: " + actualCommandLine,
Project.MSG_DEBUG);
log(actualCommandLine, Project.MSG_VERBOSE);
int retCode = exe.execute();
log("retCode=" + retCode, Project.MSG_DEBUG);
/*Throw an exception if cvs exited with error. (Iulian)*/
@@ -400,13 +399,9 @@ public abstract class AbstractCvsTask extends Task {

private String executeToString(Execute execute){

StringBuffer stringBuffer = new StringBuffer(250);
String[] commandLine = execute.getCommandline();
for (int i = 0; i < commandLine.length; i++){

stringBuffer.append(commandLine[i]);
stringBuffer.append(" ");
}
StringBuffer stringBuffer =
new StringBuffer(Commandline.describeCommand(execute
.getCommandline()));

String newLine = StringUtils.LINE_SEP;
String[] variableArray = execute.getEnvironment();


+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/ExecTask.java View File

@@ -303,9 +303,6 @@ public class ExecTask extends Task {
if (dir == null) {
dir = project.getBaseDir();
}
// show the command
log(cmdl.toString(), Project.MSG_VERBOSE);

Execute exe = new Execute(createHandler(), createWatchdog());
exe.setAntRun(getProject());
exe.setWorkingDirectory(dir);
@@ -363,6 +360,9 @@ public class ExecTask extends Task {
* overidden by subclasses
*/
protected void runExec(Execute exe) throws BuildException {
// show the command
log(cmdl.describeCommand(), Project.MSG_VERBOSE);

exe.setCommandline(cmdl.getCommandline());
try {
runExecute(exe);


+ 8
- 5
src/main/org/apache/tools/ant/taskdefs/Execute.java View File

@@ -63,7 +63,6 @@ import org.apache.tools.ant.taskdefs.condition.Os;
import java.io.File;
import java.io.IOException;


import java.io.BufferedReader;
import java.io.StringReader;
import java.io.ByteArrayOutputStream;
@@ -507,7 +506,8 @@ public class Execute {
public static void runCommand(Task task, String[] cmdline)
throws BuildException {
try {
task.log(Commandline.toString(cmdline), Project.MSG_VERBOSE);
task.log(Commandline.describeCommand(cmdline),
Project.MSG_VERBOSE);
Execute exe = new Execute(new LogStreamHandler(task,
Project.MSG_INFO,
Project.MSG_ERR));
@@ -542,7 +542,8 @@ public class Execute {
throws IOException {
if (project != null) {
project.log("Execute:CommandLauncher: " +
Commandline.toString(cmd), Project.MSG_DEBUG);
Commandline.describeCommand(cmd),
Project.MSG_DEBUG);
}
return Runtime.getRuntime().exec(cmd, env);
}
@@ -588,7 +589,8 @@ public class Execute {
}
if (project != null) {
project.log("Execute:Java11CommandLauncher: " +
Commandline.toString(newcmd), Project.MSG_DEBUG);
Commandline.describeCommand(newcmd),
Project.MSG_DEBUG);
}
return Runtime.getRuntime().exec(newcmd, env);
}
@@ -615,7 +617,8 @@ public class Execute {
try {
if (project != null) {
project.log("Execute:Java13CommandLauncher: " +
Commandline.toString(cmd), Project.MSG_DEBUG);
Commandline.describeCommand(cmd),
Project.MSG_DEBUG);
}
Object[] arguments = { cmd, env, workingDir };
return (Process) _execWithCWD.invoke(Runtime.getRuntime(),


+ 2
- 3
src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java View File

@@ -240,7 +240,7 @@ public class ExecuteOn extends ExecTask {
fileNames.copyInto(s);
for (int j = 0; j < s.length; j++) {
String[] command = getCommandline(s[j], base);
log("Executing " + Commandline.toString(command),
log(Commandline.describeCommand(command),
Project.MSG_VERBOSE);
exe.setCommandline(command);
runExecute(exe);
@@ -256,8 +256,7 @@ public class ExecuteOn extends ExecTask {
File[] b = new File[baseDirs.size()];
baseDirs.copyInto(b);
String[] command = getCommandline(s, b);
log("Executing " + Commandline.toString(command),
Project.MSG_VERBOSE);
log(Commandline.describeCommand(command), Project.MSG_VERBOSE);
exe.setCommandline(command);
runExecute(exe);
}


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/Java.java View File

@@ -135,7 +135,7 @@ public class Java extends Task {
}

if (fork) {
log("Forking " + cmdl.toString(), Project.MSG_VERBOSE);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
} else {
if (cmdl.getVmCommand().size() > 1) {
log("JVM args ignored when same JVM is used.",
@@ -151,7 +151,7 @@ public class Java extends Task {
+ "JVM is used.", Project.MSG_WARN);
}

log("Running in same VM " + cmdl.getJavaCommand().toString(),
log("Running in same VM " + cmdl.describeJavaCommand(),
Project.MSG_VERBOSE);
}


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Javadoc.java View File

@@ -1687,7 +1687,7 @@ public class Javadoc extends Task {
if (packageList != null) {
toExecute.createArgument().setValue("@" + packageList);
}
log("Javadoc args: " + toExecute, Project.MSG_VERBOSE);
log(toExecute.describeCommand(), Project.MSG_VERBOSE);

log("Javadoc execution", Project.MSG_INFO);



+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java View File

@@ -374,8 +374,8 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
* &qout;niceSourceList&quot;
*/
protected void logAndAddFilesToCompile(Commandline cmd) {
attributes.log("Compilation args: " + cmd.toString(),
Project.MSG_VERBOSE);
attributes.log("Compilation " + cmd.describeArguments(),
Project.MSG_VERBOSE);

StringBuffer niceSourceList = new StringBuffer("File");
if (compileList.length != 1) {


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java View File

@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2001 The Apache Software Foundation. All rights
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -188,7 +188,7 @@ public class ANTLR extends Task {
commandline.createArgument().setValue(outputDirectory.toString());
commandline.createArgument().setValue(target.toString());

log("Forking " + commandline.toString(), Project.MSG_VERBOSE);
log(commandline.describeCommand(), Project.MSG_VERBOSE);
int err = run(commandline.getCommandline());
if (err == 1) {
throw new BuildException("ANTLR returned: " + err, location);


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/Javah.java View File

@@ -390,7 +390,7 @@ public class Javah extends Task {
*/
protected void logAndAddFilesToCompile(Commandline cmd) {
int n = 0;
log("Compilation args: " + cmd.toString(),
log("Compilation " + cmd.describeArguments(),
Project.MSG_VERBOSE);

StringBuffer niceClassList = new StringBuffer();


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java View File

@@ -171,7 +171,7 @@ public class Rpm extends Task {

exe.setAntRun(project);
if (topDir == null) {
topDir = project.getBaseDir();
topDir = project.getBaseDir();
}
exe.setWorkingDirectory(topDir);



+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCreateTask.java View File

@@ -119,7 +119,7 @@ public class CCMCreateTask extends Continuus implements ExecuteStreamHandler {
commandLine2.createArgument().setValue(COMMAND_DEFAULT_TASK);
commandLine2.createArgument().setValue(getTask());

log(commandLine.toString(), Project.MSG_DEBUG);
log(commandLine.describeCommand(), Project.MSG_DEBUG);

result = run(commandLine2);
if (result != 0) {


+ 7
- 7
src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java View File

@@ -323,31 +323,31 @@ public class CCUpdate extends ClearCase {
}
}

/**
/**
* -graphical flag -- display graphical dialog during update operation
*/
public static final String FLAG_GRAPHICAL = "-graphical";
/**
/**
* -log flag -- file to log status to
*/
public static final String FLAG_LOG = "-log";
/**
/**
* -overwrite flag -- overwrite hijacked files
*/
public static final String FLAG_OVERWRITE = "-overwrite";
/**
/**
* -noverwrite flag -- do not overwrite hijacked files
*/
public static final String FLAG_NOVERWRITE = "-noverwrite";
/**
/**
* -rename flag -- rename hijacked files with .keep extension
*/
public static final String FLAG_RENAME = "-rename";
/**
/**
* -ctime flag -- modified time is written as the current time
*/
public static final String FLAG_CURRENTTIME = "-ctime";
/**
/**
* -ptime flag -- modified time is written as the VOB time
*/
public static final String FLAG_PRESERVETIME = "-ptime";


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java View File

@@ -242,10 +242,10 @@ public class NetCommand {
// assume the worst
try {
if (traceCommandLine) {
owner.log(commandLine.toString());
owner.log(commandLine.describeCommand());
} else {
//in verbose mode we always log stuff
logVerbose(commandLine.toString());
logVerbose(commandLine.describeCommand());
}
executable.setCommandline(commandLine.getCommandline());
err = executable.execute();


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java View File

@@ -351,7 +351,7 @@ public class BorlandDeploymentTool extends GenericDeploymentTool implements Exe

try {
log("Calling java2iiop", Project.MSG_VERBOSE);
log(commandline.toString(), Project.MSG_DEBUG);
log(commandline.describeCommand(), Project.MSG_DEBUG);
execTask.setCommandline(commandline.getCommandline());
int result = execTask.execute();
if (result != 0) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java View File

@@ -212,7 +212,7 @@ public class JJTree extends Task {
Project.MSG_INFO,
Project.MSG_INFO),
null);
log(cmdl.toString(), Project.MSG_VERBOSE);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
process.setCommandline(cmdl.getCommandline());

try {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java View File

@@ -410,7 +410,7 @@ public class JDependTask extends Task {
if (getOutputFile() != null) {
log("Output to be stored in " + getOutputFile().getPath());
}
log("Executing: " + commandline.toString(), Project.MSG_VERBOSE);
log(commandline.describeCommand(), Project.MSG_VERBOSE);
try {
return execute.execute();
} catch (IOException e) {


+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/DefaultJspCompilerAdapter.java View File

@@ -84,7 +84,8 @@ public abstract class DefaultJspCompilerAdapter
protected void logAndAddFilesToCompile(JspC jspc,
Vector compileList,
Commandline cmd) {
jspc.log("Compilation args: " + cmd.toString(), Project.MSG_VERBOSE);
jspc.log("Compilation " + cmd.describeArguments(),
Project.MSG_VERBOSE);

StringBuffer niceSourceList = new StringBuffer("File");
if (compileList.size() != 1) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java View File

@@ -667,7 +667,7 @@ public class JUnitTask extends Task {
execute.setNewenvironment(newEnvironment);
execute.setEnvironment(environment);

log("Executing: " + cmd.toString(), Project.MSG_VERBOSE);
log(cmd.describeCommand(), Project.MSG_VERBOSE);
int retVal;
try {
retVal = execute.execute();


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java View File

@@ -212,7 +212,7 @@ public abstract class AbstractMetamataTask extends Task {
/** execute the process with a specific handler */
protected void execute0(ExecuteStreamHandler handler) throws BuildException {
final Execute process = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
process.setCommandline(cmdl.getCommandline());
try {
if (process.execute() != 0) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java View File

@@ -212,7 +212,7 @@ public class MParse extends Task {
}
final Execute process = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
process.setCommandline(cmdl.getCommandline());
try {
if (process.execute() != 0) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Base.java View File

@@ -188,7 +188,7 @@ public abstract class P4Base extends org.apache.tools.ant.Task {
cmdl += cmdline[i] + " ";
}

log("Execing " + cmdl, Project.MSG_VERBOSE);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);

if (handler == null) {
handler = new SimpleP4OutputHandler(this);


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java View File

@@ -208,7 +208,7 @@ public class Pvcs extends org.apache.tools.ant.Task {
Random rand = new Random(System.currentTimeMillis());
tmp = new File("pvcs_ant_" + rand.nextLong() + ".log");
tmp2 = new File("pvcs_ant_" + rand.nextLong() + ".log");
log("Executing " + commandLine.toString(), Project.MSG_VERBOSE);
log(commandLine.describeCommand(), Project.MSG_VERBOSE);
result = runCmd(commandLine,
new PumpStreamHandler(new FileOutputStream(tmp),
new LogOutputStream(this, Project.MSG_WARN)));


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovMerge.java View File

@@ -135,7 +135,7 @@ public class CovMerge extends Task {

LogStreamHandler handler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN);
Execute exec = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
exec.setCommandline(cmdl.getCommandline());

// JProbe process always return 0 so we will not be


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovReport.java View File

@@ -285,7 +285,7 @@ public class CovReport extends Task {
// use the custom handler for stdin issues
LogStreamHandler handler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN);
Execute exec = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
exec.setCommandline(cmdl.getCommandline());
int exitValue = exec.execute();
if (exitValue != 0) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Coverage.java View File

@@ -277,7 +277,7 @@ public class Coverage extends Task {
// use the custom handler for stdin issues
LogStreamHandler handler = new CoverageStreamHandler(this);
Execute exec = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
exec.setCommandline(cmdl.getCommandline());
int exitValue = exec.execute();
if (exitValue != 0) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java View File

@@ -260,7 +260,7 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
protected void logAndAddFilesToCompile(Commandline cmd) {
Vector compileList = attributes.getCompileList();

attributes.log("Compilation args: " + cmd.toString(),
attributes.log("Compilation " + cmd.describeArguments(),
Project.MSG_VERBOSE);

StringBuffer niceSourceList = new StringBuffer("File");


+ 125
- 4
src/main/org/apache/tools/ant/types/Commandline.java View File

@@ -55,6 +55,7 @@
package org.apache.tools.ant.types;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.util.StringUtils;
import java.io.File;
import java.util.Vector;
import java.util.StringTokenizer;
@@ -87,6 +88,13 @@ public class Commandline implements Cloneable {
private Vector arguments = new Vector();
private String executable = null;

protected static final String DISCLAIMER =
StringUtils.LINE_SEP
+ "The \' characters around the executable and arguments are"
+ StringUtils.LINE_SEP
+ "not part of the command."
+ StringUtils.LINE_SEP;

public Commandline(String to_process) {
super();
String[] tmp = translateCommandline(to_process);
@@ -230,7 +238,7 @@ public class Commandline implements Cloneable {
*/
public void setExecutable(String executable) {
if (executable == null || executable.length() == 0) {
return;
return;
}
this.executable = executable.replace('/', File.separatorChar)
.replace('\\', File.separatorChar);
@@ -254,7 +262,7 @@ public class Commandline implements Cloneable {
public String[] getCommandline() {
final String[] args = getArguments();
if (executable == null) {
return args;
return args;
}
final String[] result = new String[args.length + 1];
result[0] = executable;
@@ -313,10 +321,14 @@ public class Commandline implements Cloneable {
}
}

/**
* Quotes the parts of the given array in way that makes them
* usable as command line arguments.
*/
public static String toString(String [] line) {
// empty path return empty string
if (line == null || line.length == 0) {
return "";
return "";
}

// path containing one or more elements
@@ -411,7 +423,8 @@ public class Commandline implements Cloneable {
}

/**
* Clear out the arguments but leave the executable in place for another operation.
* Clear out the arguments but leave the executable in place for
* another operation.
*/
public void clearArgs() {
arguments.removeAllElements();
@@ -428,4 +441,112 @@ public class Commandline implements Cloneable {
return new Marker(arguments.size());
}

/**
* Returns a String that describes the command and arguments
* suitable for verbose output before a call to
* <code>Runtime.exec(String[])<code>
*
* @since Ant 1.5
*/
public String describeCommand() {
return describeCommand(this);
}

/**
* Returns a String that describes the arguments suitable for
* verbose output before a call to
* <code>Runtime.exec(String[])<code>
*
* @since Ant 1.5
*/
public String describeArguments() {
return describeArguments(this);
}

/**
* Returns a String that describes the command and arguments
* suitable for verbose output before a call to
* <code>Runtime.exec(String[])<code>
*
* @since Ant 1.5
*/
public static String describeCommand(Commandline line) {
return describeCommand(line.getCommandline());
}

/**
* Returns a String that describes the arguments suitable for
* verbose output before a call to
* <code>Runtime.exec(String[])<code>
*
* @since Ant 1.5
*/
public static String describeArguments(Commandline line) {
return describeArguments(line.getArguments());
}

/**
* Returns a String that describes the command and arguments
* suitable for verbose output before a call to
* <code>Runtime.exec(String[])<code>
*
* <p>This method assumes that the first entry in the array is the
* executable to run.</p>
*
* @since Ant 1.5
*/
public static String describeCommand(String[] args) {
if (args == null || args.length == 0) {
return "";
}
StringBuffer buf = new StringBuffer("Executing \'");
buf.append(args[0]);
buf.append("\'");
if (args.length > 0) {
buf.append(" with ");
buf.append(describeArguments(args, 1));
} else {
buf.append(DISCLAIMER);
}
return buf.toString();
}

/**
* Returns a String that describes the arguments suitable for
* verbose output before a call to
* <code>Runtime.exec(String[])<code>
*
* @since Ant 1.5
*/
public static String describeArguments(String[] args) {
return describeArguments(args, 0);
}

/**
* Returns a String that describes the arguments suitable for
* verbose output before a call to
* <code>Runtime.exec(String[])<code>
*
* @param offset ignore entries before this index
*
* @since Ant 1.5
*/
protected static String describeArguments(String[] args, int offset) {
if (args == null || args.length <= offset) {
return "";
}

StringBuffer buf = new StringBuffer("argument");
if (args.length > offset) {
buf.append("s");
}
buf.append(":").append(StringUtils.LINE_SEP);
for (int i = offset; i < args.length; i++) {
buf.append("\'").append(args[i]).append("\'")
.append(StringUtils.LINE_SEP);
}
buf.append(DISCLAIMER);
return buf.toString();
}
}

+ 23
- 0
src/main/org/apache/tools/ant/types/CommandlineJava.java View File

@@ -283,6 +283,29 @@ public class CommandlineJava implements Cloneable {
return Commandline.toString(getCommandline());
}

/**
* Returns a String that describes the command and arguments
* suitable for verbose output before a call to
* <code>Runtime.exec(String[])<code>
*
* @since Ant 1.5
*/
public String describeCommand() {
return Commandline.describeCommand(getCommandline());
}

/**
* Returns a String that describes the java command and arguments
* for in VM executions.
*
* <p>The class name is the executable in this context.</p>
*
* @since Ant 1.5
*/
public String describeJavaCommand() {
return Commandline.describeCommand(getJavaCommand());
}

private Commandline getActualVMCommand() {
Commandline actualVMCommand = (Commandline) vmCommand.clone();
if (maxMemory != null) {


Loading…
Cancel
Save