diff --git a/git.go b/git.go index fdc640a..bc97064 100644 --- a/git.go +++ b/git.go @@ -96,6 +96,26 @@ func (oid *Oid) NCmp(oid2 *Oid, n uint) int { return bytes.Compare(oid.bytes[:n], oid2.bytes[:n]) } +func ShortenOids(ids []*Oid, minlen int) (int, error) { + shorten := C.git_oid_shorten_new(C.size_t(minlen)) + if shorten == nil { + panic("Out of memory") + } + defer C.git_oid_shorten_free(shorten) + + var ret C.int + for _, id := range ids { + buf := make([]byte, 41) + C.git_oid_fmt((*C.char)(unsafe.Pointer(&buf[0])), id.toC()) + buf[40] = 0 + ret = C.git_oid_shorten_add(shorten, (*C.char)(unsafe.Pointer(&buf[0]))) + if ret < 0 { + return int(ret), LastError() + } + } + return int(ret), nil +} + type GitError struct { Message string Code int