P4Message struct
Description
The P4Message struct provides a utility for managing and accessing messages generated by the
P4 Server
. These messages are typically returned as part of command execution and can include information, warnings, errors, or fatal messages. The P4Message struct encapsulates the severity of the message, its unique code, and the formatted message text, making it easier to handle and interpret server responses.
Severity of the message, which is one of the following values:
| Value | Meaning |
|---|---|
E_EMPTY
|
No error |
E_INFO
|
Informational message only |
E_WARN
|
Warning message only |
E_FAILED
|
Command failed |
E_FATAL
|
Severe error; cannot continue. |
Struct Fields
severity P4MessageSeverity
Represents the severity of the message. Possible values include info, warn, failed, fatal, or empty.
lines []P4MessageLine
A slice of P4MessageLine structs, where each line contains details about a specific part of the message, such as its severity, code, and formatted text.
Table of Methods
P4Message is a utility struct that gets attributes of message objects returned by P4 commands.
| Method | Type | Description |
|---|---|---|
|
|
Int |
Returns the number of arguments in the message line at the specified index. |
|
|
Int |
Returns the number of lines in the message. |
|
|
String |
Returns the error message as a string. |
|
|
Int |
Returns the generic error code of the message line at the specified index. |
|
|
P4MessageLine
|
Returns the message line object at the specified index. |
|
|
map[string]string |
Returns the message dictionary containing additional details. |
|
|
Int |
Returns the unique ID of the message line at the specified index. |
|
|
P4MessageSeverity
|
Returns the severity of the message line at the specified index. |
|
|
P4ResultType
|
Returns the result type of the message. |
|
|
P4MessageSeverity
|
Returns the severity level of the message. |
|
|
String |
Returns the string representation of the message. |
|
|
Int |
Returns the subcode of the message line at the specified index. |
|
|
Int |
Returns the subsystem code of the message line at the specified index. |
|
|
Int |
Returns the unique code of the message line at the specified index. |
Example
This example demonstrates how to handle and extract detailed information from a P4Message when a command fails.
package main
import (
"fmt"
"p4"
)
func main() {
// Initialize the Perforce client
p4api := p4.New()
defer p4api.Close()
// Connect to the P4 server
connected, err := p4api.Connect()
if err != nil || !connected {
fmt.Println("Failed to connect to P4 server:", err)
return
}
defer p4api.Disconnect()
client_specs, _ := p4api.RunFetch("client", "mytest")
client_specs["Root"] = "path/to/client/root"
p4api.RunSave("client", client_specs)
p4api.SetClient("mytest")
// Run a Perforce command that is expected to fail
// For example, trying to sync a non-existent file
res, err := p4api.Run("sync", "//nonexistent/file/...")
if err != nil {
fmt.Println("Failed to sync files:", err)
return
}
// Check if the result contains a P4Message
for _, item := range res {
if msg, ok := item.(P4Message); ok {
// Demonstrate all P4Message methods
fmt.Println("P4Message Details:")
fmt.Println("Severity:", msg.Severity())
fmt.Println("Count:", msg.Count())
for i := 0; i < msg.Count(); i++ {
fmt.Printf("\nMessage Line %d:\n", i+1)
fmt.Println(" Line Severity:", msg.LineSeverity(i))
fmt.Println(" Unique Code:", msg.UniqueCode(i))
fmt.Println(" SubCode:", msg.SubCode(i))
fmt.Println(" Subsystem:", msg.Subsystem(i))
fmt.Println(" Generic Code:", msg.Generic(i))
fmt.Println(" Argument Count:", msg.ArgCount(i))
fmt.Println(" Line Content:", msg.GetLine(i))
fmt.Println(" Line Data:", msg.Id(i))
fmt.Println(" ResultType:", msg.ResultType())
}
// Print the full message as a string
fmt.Println("\nFull Message:")
fmt.Println(msg.String())
// Use the Error() method to get the error string
fmt.Println("\nError String:")
fmt.Println(msg.Error())
// Print the message dictionary
fmt.Println("\nMessage Dictionary:")
fmt.Println(msg.GetMsgDict())
} else {
fmt.Println("Item is not a P4Message")
}
}
p4api.Disconnect()
}
Output:
P4Message Details:
Severity: failed
Count: 1
Message Line 1:
Line Severity: failed
Unique Code: 6244
SubCode: 100
Subsystem: 6
Generic Code: 2
Argument Count: 2
Line Content: {3 838998116 //nonexistent/file/... - must refer to client 'mytest' or a depot.}
Line Data: 838998116
ResultType: 4
Full Message:
//nonexistent/file/... - must refer to client 'mytest' or a depot.
Error String:
//nonexistent/file/... - must refer to client 'mytest' or a depot.
Message Dictionary:
map[Error 0://nonexistent/file/... - must refer to client 'mytest' or a depot. client:mytest code0:838998116 fmt0:%path% - must refer to client '%client%' or a depot. func:client-Message path://nonexistent/file/...]