Fields Summary |
---|
public static final int | DEFAULT_COMPRESSION_LEVELDefault compression level to use, if compression is enabled via
setCompression( true ). |
private static final int | MAXIMUM_COMRESSION_LEVEL |
private org.apache.tools.ant.types.Commandline | cmd |
private Vector | vecCommandlineslist of Commandline children |
private String | cvsRootthe CVSROOT variable. |
private String | cvsRshthe CVS_RSH variable. |
private String | cvsPackagethe package/module to check out. |
private String | tagthe tag |
private static final String | DEFAULT_COMMANDthe default command. |
private String | commandthe CVS command to execute. |
private boolean | quietsuppress information messages. |
private boolean | reallyquietsuppress all messages. |
private int | compressioncompression level to use. |
private boolean | noexecreport only, don't change any files. |
private int | portCVS port |
private File | passFileCVS password file |
private File | destthe directory where the checked out files should be placed. |
private boolean | appendwhether or not to append stdout/stderr to existing files |
private File | outputthe file to direct standard output from the command. |
private File | errorthe file to direct standard error from the command. |
private boolean | failOnErrorIf true it will stop the build if cvs exits with error.
Default is false. (Iulian) |
private ExecuteStreamHandler | executeStreamHandlerCreate accessors for the following, to allow different handling of
the output. |
private OutputStream | outputStream |
private OutputStream | errorStream |
Methods Summary |
---|
public void | addCommandArgument(java.lang.String arg)This needs to be public to allow configuration
of commands externally.
this.addCommandArgument(cmd, arg);
|
public void | addCommandArgument(org.apache.tools.ant.types.Commandline c, java.lang.String arg)This method adds a command line argument to an external command.
I do not understand what this method does in this class ???
particularly not why it is public ????
AntoineLL July 23d 2003
c.createArgument().setValue(arg);
|
public void | addConfiguredCommandline(org.apache.tools.ant.types.Commandline c)Adds direct command-line to execute.
this.addConfiguredCommandline(c, false);
|
public void | addConfiguredCommandline(org.apache.tools.ant.types.Commandline c, boolean insertAtStart)Configures and adds the given Commandline.
if (c == null) {
return;
}
this.configureCommandline(c);
if (insertAtStart) {
vecCommandlines.insertElementAt(c, 0);
} else {
vecCommandlines.addElement(c);
}
|
protected void | configureCommandline(org.apache.tools.ant.types.Commandline c)Configure a commandline element for things like cvsRoot, quiet, etc.
if (c == null) {
return;
}
c.setExecutable("cvs");
if (cvsPackage != null) {
c.createArgument().setLine(cvsPackage);
}
if (this.compression > 0
&& this.compression <= MAXIMUM_COMRESSION_LEVEL) {
c.createArgument(true).setValue("-z" + this.compression);
}
if (quiet && !reallyquiet) {
c.createArgument(true).setValue("-q");
}
if (reallyquiet) {
c.createArgument(true).setValue("-Q");
}
if (noexec) {
c.createArgument(true).setValue("-n");
}
if (cvsRoot != null) {
c.createArgument(true).setLine("-d" + cvsRoot);
}
|
public void | execute()do the work
String savedCommand = getCommand();
if (this.getCommand() == null && vecCommandlines.size() == 0) {
// re-implement legacy behaviour:
this.setCommand(AbstractCvsTask.DEFAULT_COMMAND);
}
String c = this.getCommand();
Commandline cloned = null;
if (c != null) {
cloned = (Commandline) cmd.clone();
cloned.createArgument(true).setLine(c);
this.addConfiguredCommandline(cloned, true);
}
try {
for (int i = 0; i < vecCommandlines.size(); i++) {
this.runCommand((Commandline) vecCommandlines.elementAt(i));
}
} finally {
if (cloned != null) {
removeCommandline(cloned);
}
setCommand(savedCommand);
FileUtils.close(outputStream);
FileUtils.close(errorStream);
}
|
private java.lang.String | executeToString(Execute execute)
StringBuffer stringBuffer =
new StringBuffer(Commandline.describeCommand(execute
.getCommandline()));
String newLine = StringUtils.LINE_SEP;
String[] variableArray = execute.getEnvironment();
if (variableArray != null) {
stringBuffer.append(newLine);
stringBuffer.append(newLine);
stringBuffer.append("environment:");
stringBuffer.append(newLine);
for (int z = 0; z < variableArray.length; z++) {
stringBuffer.append(newLine);
stringBuffer.append("\t");
stringBuffer.append(variableArray[z]);
}
}
return stringBuffer.toString();
|
public java.lang.String | getCommand()accessor to a command line as string
This should be deprecated
AntoineLL July 23d 2003
return this.command;
|
public java.lang.String | getCvsRoot()access the CVSROOT variable
return this.cvsRoot;
|
public java.lang.String | getCvsRsh()access the CVS_RSH variable
return this.cvsRsh;
|
public java.io.File | getDest()get the file where the checked out files should be placed
return this.dest;
|
protected java.io.OutputStream | getErrorStream()access the stream to which the stderr from cvs should go
if this stream has already been set, it will be returned
if the stream has not yet been set, if the attribute error
has been set, the output stream will go to the file denoted by the error attribute
otherwise the stderr output will go to ant's logging system
if (this.errorStream == null) {
if (error != null) {
try {
setErrorStream(new PrintStream(
new BufferedOutputStream(
new FileOutputStream(error.getPath(),
append))));
} catch (IOException e) {
throw new BuildException(e, getLocation());
}
} else {
setErrorStream(new LogOutputStream(this, Project.MSG_WARN));
}
}
return this.errorStream;
|
protected ExecuteStreamHandler | getExecuteStreamHandler()find the handler and instantiate it if it does not exist yet
if (this.executeStreamHandler == null) {
setExecuteStreamHandler(new PumpStreamHandler(getOutputStream(),
getErrorStream()));
}
return this.executeStreamHandler;
|
protected java.io.OutputStream | getOutputStream()access the stream to which the stdout from cvs should go
if this stream has already been set, it will be returned
if the stream has not yet been set, if the attribute output
has been set, the output stream will go to the output file
otherwise the output will go to ant's logging system
if (this.outputStream == null) {
if (output != null) {
try {
setOutputStream(new PrintStream(
new BufferedOutputStream(
new FileOutputStream(output
.getPath(),
append))));
} catch (IOException e) {
throw new BuildException(e, getLocation());
}
} else {
setOutputStream(new LogOutputStream(this, Project.MSG_INFO));
}
}
return this.outputStream;
|
public java.lang.String | getPackage()access the package or module to operate upon
return this.cvsPackage;
|
public java.io.File | getPassFile()find the password file
return this.passFile;
|
public int | getPort()access the port of CVS
return this.port;
|
public java.lang.String | getTag()tag or branch
return tag;
|
protected void | removeCommandline(org.apache.tools.ant.types.Commandline c)remove a particular command from a vector of command lines
vecCommandlines.removeElement(c);
|
protected void | runCommand(org.apache.tools.ant.types.Commandline toExecute)Sets up the environment for toExecute and then runs it.
// XXX: we should use JCVS (www.ice.com/JCVS) instead of
// command line execution so that we don't rely on having
// native CVS stuff around (SM)
// We can't do it ourselves as jCVS is GPLed, a third party task
// outside of jakarta repositories would be possible though (SB).
Environment env = new Environment();
if (port > 0) {
Environment.Variable var = new Environment.Variable();
var.setKey("CVS_CLIENT_PORT");
var.setValue(String.valueOf(port));
env.addVariable(var);
}
/**
* Need a better cross platform integration with <cvspass>, so
* use the same filename.
*/
if (passFile == null) {
File defaultPassFile = new File(
System.getProperty("cygwin.user.home",
System.getProperty("user.home"))
+ File.separatorChar + ".cvspass");
if (defaultPassFile.exists()) {
this.setPassfile(defaultPassFile);
}
}
if (passFile != null) {
if (passFile.isFile() && passFile.canRead()) {
Environment.Variable var = new Environment.Variable();
var.setKey("CVS_PASSFILE");
var.setValue(String.valueOf(passFile));
env.addVariable(var);
log("Using cvs passfile: " + String.valueOf(passFile),
Project.MSG_VERBOSE);
} else if (!passFile.canRead()) {
log("cvs passfile: " + String.valueOf(passFile)
+ " ignored as it is not readable",
Project.MSG_WARN);
} else {
log("cvs passfile: " + String.valueOf(passFile)
+ " ignored as it is not a file",
Project.MSG_WARN);
}
}
if (cvsRsh != null) {
Environment.Variable var = new Environment.Variable();
var.setKey("CVS_RSH");
var.setValue(String.valueOf(cvsRsh));
env.addVariable(var);
}
//
// Just call the getExecuteStreamHandler() and let it handle
// the semantics of instantiation or retrieval.
//
Execute exe = new Execute(getExecuteStreamHandler(), null);
exe.setAntRun(getProject());
if (dest == null) {
dest = getProject().getBaseDir();
}
if (!dest.exists()) {
dest.mkdirs();
}
exe.setWorkingDirectory(dest);
exe.setCommandline(toExecute.getCommandline());
exe.setEnvironment(env.getVariables());
try {
String actualCommandLine = executeToString(exe);
log(actualCommandLine, Project.MSG_VERBOSE);
int retCode = exe.execute();
log("retCode=" + retCode, Project.MSG_DEBUG);
/*Throw an exception if cvs exited with error. (Iulian)*/
if (failOnError && Execute.isFailure(retCode)) {
throw new BuildException("cvs exited with error code "
+ retCode
+ StringUtils.LINE_SEP
+ "Command line was ["
+ actualCommandLine + "]",
getLocation());
}
} catch (IOException e) {
if (failOnError) {
throw new BuildException(e, getLocation());
}
log("Caught exception: " + e.getMessage(), Project.MSG_WARN);
} catch (BuildException e) {
if (failOnError) {
throw(e);
}
Throwable t = e.getException();
if (t == null) {
t = e;
}
log("Caught exception: " + t.getMessage(), Project.MSG_WARN);
} catch (Exception e) {
if (failOnError) {
throw new BuildException(e, getLocation());
}
log("Caught exception: " + e.getMessage(), Project.MSG_WARN);
}
|
public void | setAppend(boolean value)Whether to append output/error when redirecting to a file.
this.append = value;
|
public void | setCommand(java.lang.String c)The CVS command to execute.
This should be deprecated, it is better to use the Commandline class ?
AntoineLL July 23d 2003
this.command = c;
|
public void | setCompression(boolean usecomp)If true, this is the same as compressionlevel="3".
setCompressionLevel(usecomp
? AbstractCvsTask.DEFAULT_COMPRESSION_LEVEL : 0);
|
public void | setCompressionLevel(int level)If set to a value 1-9 it adds -zN to the cvs command line, else
it disables compression.
this.compression = level;
|
public void | setCvsRoot(java.lang.String root)The CVSROOT variable.
// Check if not real cvsroot => set it to null
if (root != null) {
if (root.trim().equals("")) {
root = null;
}
}
this.cvsRoot = root;
|
public void | setCvsRsh(java.lang.String rsh)The CVS_RSH variable.
// Check if not real cvsrsh => set it to null
if (rsh != null) {
if (rsh.trim().equals("")) {
rsh = null;
}
}
this.cvsRsh = rsh;
|
public void | setDate(java.lang.String p)Use the most recent revision no later than the given date.
if (p != null && p.trim().length() > 0) {
addCommandArgument("-D");
addCommandArgument(p);
}
|
public void | setDest(java.io.File dest)The directory where the checked out files should be placed.
Note that this is different from CVS's -d command line
switch as Ant will never shorten pathnames to avoid empty
directories.
this.dest = dest;
|
public void | setError(java.io.File error)The file to direct standard error from the command.
this.error = error;
|
protected void | setErrorStream(java.io.OutputStream errorStream)sets a stream to which the stderr from the cvs exe should go
this.errorStream = errorStream;
|
public void | setExecuteStreamHandler(ExecuteStreamHandler handler)sets the handler
this.executeStreamHandler = handler;
|
public void | setFailOnError(boolean failOnError)Stop the build process if the command exits with
a return code other than 0.
Defaults to false.
this.failOnError = failOnError;
|
public void | setNoexec(boolean ne)If true, report only and don't change any files.
noexec = ne;
|
public void | setOutput(java.io.File output)The file to direct standard output from the command.
this.output = output;
|
protected void | setOutputStream(java.io.OutputStream outputStream)sets a stream to which the output from the cvs executable should be sent
this.outputStream = outputStream;
|
public void | setPackage(java.lang.String p)The package/module to operate upon.
this.cvsPackage = p;
|
public void | setPassfile(java.io.File passFile)Password file to read passwords from.
this.passFile = passFile;
|
public void | setPort(int port)Port used by CVS to communicate with the server.
this.port = port;
|
public void | setQuiet(boolean q)If true, suppress informational messages.
quiet = q;
|
public void | setReallyquiet(boolean q)If true, suppress all messages.
reallyquiet = q;
|
public void | setTag(java.lang.String p)The tag of the package/module to operate upon.
// Check if not real tag => set it to null
if (p != null && p.trim().length() > 0) {
tag = p;
addCommandArgument("-r" + p);
}
|