ClientUser::OutputInfo( char, const char * )

Output tabular data.

Virtual?

Yes

 

Class

ClientUser

 

Arguments

char level

the indentation "level" of the output

 

const char *data

one line of output

Returns

void

 

Notes

OutputInfo() is called by the server during most Helix Server commands; its most common use is to display listings of information about files. Any output not printed with OutputInfo() is typically printed with OutputText(). Running p4 -s <command> indicates whether any given line of output is "info" or "text".

In the default implementation of OutputInfo(), one “…​” string is printed per "level". Values given as "levels" are either 0, 1, or 2. The "data" passed is generally one line, without a line break; OutputInfo() adds the newline when it prints the output.

To capture information directly from Helix Server commands for parsing or storing rather than output to stdout, it is usually necessary to use an alternate implementation of OutputInfo().

2002.1 and newer servers do not call OutputInfo() to display information. Instead, they call Message(). The default implementation of Message() calls OutputInfo() if its argument represents information instead of an error; older code that uses OutputInfo() can be used with the newer API and newer servers, so long as the default implementation of Message() is retained.

Example

The p4 filelog command produces tabular output:

> p4 filelog final.c
//depot/final.c
... #3 change 703 edit on 2001/08/24 by testuser@shire (text) 'fixed'
... ... copy into //depot/new.c#4
... #2 change 698 edit on 2001/08/24 by testuser@shire (text) 'buggy'
... ... branch into //depot/middle.c#1
... #1 change 697 branch on 2001/08/24 by testuser@shire (text) 'test'
... ... branch from //depot/old.c#1,#3

Each line of output corresponds to one call to OutputInfo(). The first line of output has a level of '0', the line for each revision has a level of '1', and the integration record lines have levels of '2'. (The actual "data" text for these lines does not include the “…​” strings.)

To alter the way in which "info" output from the server is handled, create a subclass of ClientUser and provide an alternate implementation of OutputInfo().

For example, to capture output in a set of StrBuf variables rather than display it to stdout, your ClientUser subclass must contain three StrBufs, one for each level of info output, as follows:

void MyClientUser::OutputInfo( char level, const char *data )
{
    switch( level )
    {
        default:
        case '0':
            myInfo0.Append( data );
            myInfo0.Append( "\n" );
            break;
        case '1':
            myInfo1.Append( data );
            myInfo1.Append( "\n" );
            break;
        case '2':
            myInfo2.Append( data );
            myInfo2.Append( "\n" );
            break;
    }
}