diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2016-06-27 10:22:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-27 10:22:36 +0200 |
commit | 808076af869550a200a3a544c9ee2fa22a8b6a85 (patch) | |
tree | a9f7c6478c099171d97072dd29c53264d53aad8c /cshared/file_cshared.go | |
parent | e305c47ed628770d99754207031b45bbb7a44517 (diff) | |
parent | da07dca4523ebd25c634152a62cae4a72eb5783f (diff) | |
download | go-git-808076af869550a200a3a544c9ee2fa22a8b6a85.tar.gz |
Merge pull request #56 from vmarkovtsev/master
Wrap more objects with CGo
Diffstat (limited to 'cshared/file_cshared.go')
-rw-r--r-- | cshared/file_cshared.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/cshared/file_cshared.go b/cshared/file_cshared.go new file mode 100644 index 0000000..7f7c917 --- /dev/null +++ b/cshared/file_cshared.go @@ -0,0 +1,67 @@ +package main + +import ( + "C" + + "gopkg.in/src-d/go-git.v3" +) + +//export c_File_get_Name +func c_File_get_Name(f uint64) *C.char { + obj, ok := GetObject(Handle(f)) + if !ok { + return nil + } + file := obj.(*git.File) + return C.CString(file.Name) +} + +//export c_File_get_Mode +func c_File_get_Mode(f uint64) uint32 { + obj, ok := GetObject(Handle(f)) + if !ok { + return 0 + } + file := obj.(*git.File) + return uint32(file.Mode) +} + +//export c_NewFileIter +func c_NewFileIter(r uint64, t uint64) uint64 { + obj, ok := GetObject(Handle(r)) + if !ok { + return IH + } + repo := obj.(*git.Repository) + obj, ok = GetObject(Handle(t)) + if !ok { + return IH + } + tree := obj.(*git.Tree) + iter := git.NewFileIter(repo, tree) + return uint64(RegisterObject(iter)) +} + +//export c_FileIter_Next +func c_FileIter_Next(i uint64) (uint64, int, *C.char) { + obj, ok := GetObject(Handle(i)) + if !ok { + return IH, ErrorCodeNotFound, C.CString(MessageNotFound) + } + iter := obj.(*git.FileIter) + file, err := iter.Next() + if err != nil { + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + return uint64(RegisterObject(file)), ErrorCodeSuccess, nil +} + +//export c_FileIter_Close +func c_FileIter_Close(i uint64) { + obj, ok := GetObject(Handle(i)) + if !ok { + return + } + iter := obj.(*git.FileIter) + iter.Close() +} |