Error handling

If a command returns a null, there were likely errors. Errors have different severity levels and do not necessarily mean that a command has failed. P4 API.NET methods will throw a P4Exception if an error of severity E_FAILED or higher is returned. This setting can be changed in P4Exception.MinThrowLevel. For example:

// turn off P4Exceptions
P4Exception.MinThrowLevel = ErrorSeverity.E_NOEXC;

Command that will throw an exception

The following is an example of a command that will throw a P4Exception:

try
{
	// set options for client command
	ClientCmdOptions clientOpts = new ClientCmdOptions(ClientCmdFlags.Switch);

	// attempt to get label with p4 -s label testLabel
	Label label = rep.GetLabel("testLabel", null, clientOpts);
}
catch (P4Exception ex)
{
	// catch exception and display error message
	Console.WriteLine(ex.Message);
}

An exception is thrown because the error that the command returns is of severity E_FAILED. The Message displayed is: Usage: label [ -d -f -g -i -o -t template ] labelname Invalid option: -s because there is no -s flag for p4 label.

Command that will not throw an exception

This is an example of a command that will not throw a P4Exception:

// set options for client command
 try
{
	SyncFilesCmdOptions syncOpts = new SyncFilesCmdOptions(SyncFilesCmdFlags.None, 1);
	FileSpec depotFile = new FileSpec(new DepotPath("//depot/test.txt"), null, null, null);
	IList<FileSpec> syncedFiles = rep.Connection.Client.SyncFiles(syncOpts, depotFile);
}
catch (P4Exception ex)
{
	Console.WriteLine(ex.Message);
}

An error is not thrown because the error that the command returns is of severity E_WARN. The file, //depot/test.txt is already at the latest revision but the command has still succeeded with a warning of //depot/test.txt - file(s) up-to-date. syncedFiles will be null.