From 7caac1fa7b52eb30df29aa3b460f6511993fafd0 Mon Sep 17 00:00:00 2001 From: Ankur Mittal Date: Wed, 19 Apr 2017 18:36:00 -0700 Subject: [PATCH] Add support for getting short object Id --- object.go | 14 ++++++++++++++ object_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/object.go b/object.go index 1981980..b365a3f 100644 --- a/object.go +++ b/object.go @@ -49,6 +49,20 @@ func (o *Object) Id() *Oid { 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 { return ObjectType(C.git_object_type(o.ptr)) } diff --git a/object_test.go b/object_test.go index cb262de..1b188a8 100644 --- a/object_test.go +++ b/object_test.go @@ -1,6 +1,7 @@ package git import ( + "strings" "testing" ) @@ -105,6 +106,32 @@ func TestObjectOwner(t *testing.T) { 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) { t.Parallel() repo := createTestRepo(t)