diff options
Diffstat (limited to 'cshared/commit_cshared.go')
-rw-r--r-- | cshared/commit_cshared.go | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/cshared/commit_cshared.go b/cshared/commit_cshared.go new file mode 100644 index 0000000..791660b --- /dev/null +++ b/cshared/commit_cshared.go @@ -0,0 +1,178 @@ +// +build ignore +package main + +import ( + "C" + "io" + + "gopkg.in/src-d/go-git.v3" + "gopkg.in/src-d/go-git.v3/core" +) + +//export c_Commit_get_Hash +func c_Commit_get_Hash(c uint64) *C.char { + obj, ok := GetObject(Handle(c)) + if !ok { + return nil + } + commit := obj.(*git.Commit) + return C.CString(string(commit.Hash[:])) +} + +//export c_Commit_get_Author +func c_Commit_get_Author(c uint64) uint64 { + obj, ok := GetObject(Handle(c)) + if !ok { + return IH + } + commit := obj.(*git.Commit) + author := &commit.Author + author_handle := RegisterObject(author) + return uint64(author_handle) +} + +//export c_Commit_get_Committer +func c_Commit_get_Committer(c uint64) uint64 { + obj, ok := GetObject(Handle(c)) + if !ok { + return IH + } + commit := obj.(*git.Commit) + committer := &commit.Committer + committer_handle := RegisterObject(committer) + return uint64(committer_handle) +} + +//export c_Commit_get_Message +func c_Commit_get_Message(c uint64) *C.char { + obj, ok := GetObject(Handle(c)) + if !ok { + return nil + } + commit := obj.(*git.Commit) + return C.CString(commit.Message) +} + +//export c_Commit_Tree +func c_Commit_Tree(c uint64) uint64 { + obj, ok := GetObject(Handle(c)) + if !ok { + return IH + } + commit := obj.(*git.Commit) + tree := commit.Tree() + tree_handle := RegisterObject(tree) + return uint64(tree_handle) +} + +//export c_Commit_Parents +func c_Commit_Parents(c uint64) uint64 { + obj, ok := GetObject(Handle(c)) + if !ok { + return IH + } + commit := obj.(*git.Commit) + parents := commit.Parents() + parents_handle := RegisterObject(parents) + return uint64(parents_handle) +} + +//export c_Commit_NumParents +func c_Commit_NumParents(c uint64) int { + obj, ok := GetObject(Handle(c)) + if !ok { + return -1 + } + commit := obj.(*git.Commit) + return commit.NumParents() +} + +//export c_Commit_File +func c_Commit_File(c uint64, path string) (uint64, int, *C.char) { + obj, ok := GetObject(Handle(c)) + if !ok { + return IH, ErrorCodeNotFound, C.CString(MessageNotFound) + } + commit := obj.(*git.Commit) + file, err := commit.File(CopyString(path)) + if err != nil { + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + file_handle := RegisterObject(file) + return uint64(file_handle), ErrorCodeSuccess, nil +} + +//export c_Commit_ID +func c_Commit_ID(c uint64) *C.char { + return c_Commit_get_Hash(c) +} + +//export c_Commit_Type +func c_Commit_Type(c uint64) int8 { + obj, ok := GetObject(Handle(c)) + if !ok { + return -1 + } + commit := obj.(*git.Commit) + return int8(commit.Type()) +} + +//export c_Commit_Decode +func c_Commit_Decode(o uint64) (uint64, int, *C.char) { + commit := git.Commit{} + obj, ok := GetObject(Handle(o)) + if !ok { + return IH, ErrorCodeNotFound, C.CString(MessageNotFound) + } + cobj := obj.(*core.Object) + err := commit.Decode(*cobj) + if err != nil { + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + return uint64(RegisterObject(&commit)), ErrorCodeSuccess, nil +} + +//export c_Commit_String +func c_Commit_String(c uint64) *C.char { + obj, ok := GetObject(Handle(c)) + if !ok { + return nil + } + commit := obj.(*git.Commit) + return C.CString(commit.String()) +} + +//export c_NewCommitIter +func c_NewCommitIter(r uint64, iter uint64) uint64 { + obj, ok := GetObject(Handle(r)) + if !ok { + return IH + } + repo := obj.(*git.Repository) + obj, ok = GetObject(Handle(iter)) + if !ok { + return IH + } + obj_iter := obj.(*core.ObjectIter) + commit_iter := git.NewCommitIter(repo, *obj_iter) + handle := RegisterObject(commit_iter) + return uint64(handle) +} + +//export c_CommitIter_Next +func c_CommitIter_Next(iter uint64) (uint64, int, *C.char) { + obj, ok := GetObject(Handle(iter)) + if !ok { + return IH, ErrorCodeNotFound, C.CString(MessageNotFound) + } + commitIter := obj.(*git.CommitIter) + commit, err := commitIter.Next() + if err != nil { + if err == io.EOF { + return IH, ErrorCodeSuccess, nil + } + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + handle := RegisterObject(commit) + return uint64(handle), ErrorCodeSuccess, nil +} |