MessageTrailers parses trailers out of a message, returning a slice of Trailer structs. Trailers are key/value pairs in the last paragraph of a message, not including any patches or conflicts that may be present.
(message string)
| 19 | // Trailer structs. Trailers are key/value pairs in the last paragraph of a |
| 20 | // message, not including any patches or conflicts that may be present. |
| 21 | func MessageTrailers(message string) ([]Trailer, error) { |
| 22 | var trailersC C.git_message_trailer_array |
| 23 | |
| 24 | messageC := C.CString(message) |
| 25 | defer C.free(unsafe.Pointer(messageC)) |
| 26 | |
| 27 | runtime.LockOSThread() |
| 28 | defer runtime.UnlockOSThread() |
| 29 | |
| 30 | ecode := C.git_message_trailers(&trailersC, messageC) |
| 31 | if ecode < 0 { |
| 32 | return nil, MakeGitError(ecode) |
| 33 | } |
| 34 | defer C.git_message_trailer_array_free(&trailersC) |
| 35 | trailers := make([]Trailer, trailersC.count) |
| 36 | var trailer *C.git_message_trailer |
| 37 | for i, p := 0, uintptr(unsafe.Pointer(trailersC.trailers)); i < int(trailersC.count); i, p = i+1, p+unsafe.Sizeof(C.git_message_trailer{}) { |
| 38 | trailer = (*C.git_message_trailer)(unsafe.Pointer(p)) |
| 39 | trailers[i] = Trailer{Key: C.GoString(trailer.key), Value: C.GoString(trailer.value)} |
| 40 | } |
| 41 | return trailers, nil |
| 42 | } |
searching dependent graphs…