FileDocCategorySizeDatePackage
SimpleP4OutputHandler.javaAPI DocApache Ant 1.703691Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant.taskdefs.optional.perforce

SimpleP4OutputHandler

public class SimpleP4OutputHandler extends P4HandlerAdapter
simple implementation of P4HandlerAdapter used by tasks which are not actually processing the output from Perforce

Fields Summary
P4Base
parent
Constructors Summary
public SimpleP4OutputHandler(P4Base parent)
simple constructor

param
parent a P4Base instance

        this.parent = parent;
    
Methods Summary
public voidprocess(java.lang.String line)
process one line of stderr/stdout if error conditions are detected, then setters are called on the parent

param
line line of output
throws
BuildException does not throw exceptions any more

        if (parent.util.match("/^exit/", line)) {
            return;
        }

        //Throw exception on errors (except up-to-date)
        //
        //When a server is down, the code expects :
        //Perforce client error:
        //Connect to server failed; check $P4PORT.
        //TCP connect to localhost:1666 failed.
        //connect: localhost:1666: Connection refused
        //Some forms producing commands (p4 -s change -o) do tag the output
        //others don't.....
        //Others mark errors as info, for example edit a file
        //which is already open for edit.....
        //Just look for error: - catches most things....

        if (parent.util.match("/^error:/", line)
            || parent.util.match("/^Perforce client error:/", line)) {
            //when running labelsync, if view elements are in sync,
            //Perforce produces a line of output
            //looking like this one :
            //error: //depot/file2 - label in sync.
            if (!parent.util.match("/label in sync/", line)
                && !parent.util.match("/up-to-date/", line)) {
                parent.setInError(true);
            } else {
                //sync says "error:" when a file is up-to-date
                line = parent.util.substitute("s/^[^:]*: //", line);
            }
        } else if (parent.util.match("/^info.*?:/", line)) {
            //sometimes there's "info1:
            line = parent.util.substitute("s/^[^:]*: //", line);
        }
        parent.log(line, parent.getInError() ? Project.MSG_ERR : Project.MSG_INFO);

        if (parent.getInError()) {
            parent.setErrorMessage(parent.getErrorMessage() + line + StringUtils.LINE_SEP);
        }