@@ -60,21 +60,23 @@ package org.apache.tools.ant.taskdefs.optional.perforce;
import org.apache.tools.ant.*;
/** P4Counter - Obtain the value of a counter.
/** P4Counter - Obtain or set the value of a counter.
* P4Counter can be used to either print the value of a counter
* to the output stream for the project (by setting the "name"
* attribute only), to set a property based on the value of
* a counter (by setting the "property" attribute) or to set the counter
* on the perforce server (by setting the "value" attribute).
*
* Example Usage:<br>
* <p4counter name="${p4.change}"/>
* <p4counter name="${p4.counter}" property=${p4.c hange}"/>
* @author <a href="mailto:kirk@radik.com">Kirk Wylie</a>
*
* ToDo: Should be able to write the counter value to a property.
* I've left that out of the first version here because it involves
* changing the P4OutputHandler fairly substantially, and thus
* shouldn't be the second thing that I do here.
*/
public class P4Counter extends P4Base {
public String counter = null;
public String property = null;
public boolean shouldSetValue = false;
public boolean shouldSetProperty = false;
public int value = 0;
public void setName(String counter) {
@@ -86,17 +88,51 @@ public class P4Counter extends P4Base {
shouldSetValue = true;
}
public void setProperty(String property) {
this.property = property;
shouldSetProperty = true;
}
public void execute() throws BuildException {
if((counter == null) || counter.length() == 0) {
throw new BuildException("No counter specified to retrieve");
}
String command = "-s counter " + P4CmdOpts + " " + counter;
if(shouldSetValue && shouldSetProperty) {
throw new BuildException("Cannot both set the value of the property and retrieve the value of the property.");
}
String command = "counter " + P4CmdOpts + " " + counter;
if(!shouldSetProperty) {
// NOTE kirk@radik.com 04-April-2001 -- If you put in the -s, you
// have to start running through regular expressions here. Much easier
// to just not include the scripting information than to try to add it
// and strip it later.
command = "-s " + command;
}
if(shouldSetValue) {
command += " " + value;
}
execP4Command(command, new SimpleP4OutputHandler(this));
if(shouldSetProperty) {
final Project myProj = project;
P4Handler handler = new P4HandlerAdapter() {
public void process(String line) {
log("P4Counter retrieved line \""+ line + "\"", Project.MSG_VERBOSE);
try {
value = Integer.parseInt(line);
myProj.setProperty(property, ""+value);
} catch (NumberFormatException nfe) {
throw new BuildException("Perforce error. Could not retrieve counter value.");
}
}
};
execP4Command(command, handler);
} else {
execP4Command(command, new SimpleP4OutputHandler(this));
}
}
}