aboutsummaryrefslogtreecommitdiffstats
path: root/cshared/commit_cshared.go
diff options
context:
space:
mode:
Diffstat (limited to 'cshared/commit_cshared.go')
-rw-r--r--cshared/commit_cshared.go178
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
+}