Commit daee43b8 authored by Carlos Martín Nieto's avatar Carlos Martín Nieto Committed by GitHub

Merge pull request #376 from ankurmittal/short-hash

Add support for getting short object Id
parents 7cd5a4e7 7caac1fa
...@@ -49,6 +49,20 @@ func (o *Object) Id() *Oid { ...@@ -49,6 +49,20 @@ func (o *Object) Id() *Oid {
return newOidFromC(C.git_object_id(o.ptr)) return newOidFromC(C.git_object_id(o.ptr))
} }
func (o *Object) ShortId() (string, error) {
resultBuf := C.git_buf{}
runtime.LockOSThread()
defer runtime.UnlockOSThread()
ecode := C.git_object_short_id(&resultBuf, o.ptr)
if ecode < 0 {
return "", MakeGitError(ecode)
}
defer C.git_buf_free(&resultBuf)
return C.GoString(resultBuf.ptr), nil
}
func (o *Object) Type() ObjectType { func (o *Object) Type() ObjectType {
return ObjectType(C.git_object_type(o.ptr)) return ObjectType(C.git_object_type(o.ptr))
} }
......
package git package git
import ( import (
"strings"
"testing" "testing"
) )
...@@ -105,6 +106,32 @@ func TestObjectOwner(t *testing.T) { ...@@ -105,6 +106,32 @@ func TestObjectOwner(t *testing.T) {
checkOwner(t, repo, tree.Object) checkOwner(t, repo, tree.Object)
} }
func checkShortId(t *testing.T, Id, shortId string) {
if len(shortId) < 7 || len(shortId) >= len(Id) {
t.Fatal("bad shortId lenght %s", len(shortId))
}
if !strings.HasPrefix(Id, shortId) {
t.Fatalf("bad shortId, should be prefix of %s, but is %s\n", Id, shortId)
}
}
func TestObjectShortId(t *testing.T) {
t.Parallel()
repo := createTestRepo(t)
defer cleanupTestRepo(t, repo)
commitId, _ := seedTestRepo(t, repo)
commit, err := repo.LookupCommit(commitId)
checkFatal(t, err)
shortId, err := commit.ShortId()
checkFatal(t, err)
checkShortId(t, commitId.String(), shortId)
}
func TestObjectPeel(t *testing.T) { func TestObjectPeel(t *testing.T) {
t.Parallel() t.Parallel()
repo := createTestRepo(t) repo := createTestRepo(t)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment