summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAxel Wagner <[email protected]>2013-05-21 23:03:11 +0200
committerAxel Wagner <[email protected]>2013-05-21 23:03:11 +0200
commit535a178afaca3b92363ff573edb442261d00764f (patch)
treeedbe291824f3260eb84f1337e3a09a55d7ecb484
parent4e0a28b064047513194a842e9c16d9beab545f41 (diff)
Implement ShortenOids
-rw-r--r--git.go20
1 files changed, 20 insertions, 0 deletions
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