Repository.CreateCommit

This commit is contained in:
Vicent Marti 2013-03-06 16:59:45 +01:00
parent bdfd8736bc
commit 20e2528478
2 changed files with 32 additions and 6 deletions

View File

@ -10,6 +10,7 @@ import "C"
import (
"runtime"
"unsafe"
"time"
)
@ -74,3 +75,20 @@ func (sig *Signature) Time() time.Time {
loc := time.FixedZone("", sig.Offset*60)
return time.Unix(sig.UnixTime, 0).In(loc)
}
func (sig *Signature) toC() (*C.git_signature) {
var out *C.git_signature
name := C.CString(sig.Name)
defer C.free(unsafe.Pointer(name))
email := C.CString(sig.Email)
defer C.free(unsafe.Pointer(email))
ret := C.git_signature_new(&out, name, email, C.git_time_t(sig.UnixTime), C.int(sig.Offset))
if ret < 0 {
return nil
}
return out
}

View File

@ -104,19 +104,22 @@ func (v *Repository) Walk() (*RevWalk, error) {
return walk, nil
}
/* TODO
func (v *Repository) Commit(
func (v *Repository) CreateCommit(
refname string, author, committer *Signature,
message string, tree *Tree, parents ...*Commit) (*Oid, error) {
oid := new(Oid)
cref := C.CString(refname)
defer C.free(unsafe.Pointer(cref))
cmsg := C.CString(message)
defer C.free(unsafe.Pointer(cmsg))
nparents := len(parents)
var cparents []*C.git_commit = nil
var parentsarg **C.git_commit = nil
nparents:= len(parents)
if nparents > 0 {
cparents = make([]*C.git_commit, nparents)
for i, v := range parents {
@ -125,18 +128,23 @@ func (v *Repository) Commit(
parentsarg = &cparents[0]
}
authorSig := author.toC()
defer C.git_signature_free(authorSig)
committerSig := committer.toC()
defer C.git_signature_free(committerSig)
ret := C.git_commit_create(
oid.toC(), v.ptr, cref,
author.git_signature, committer.git_signature,
authorSig, committerSig,
nil, cmsg, tree.ptr, C.int(nparents), parentsarg)
if ret < GIT_SUCCESS {
if ret < 0 {
return nil, LastError()
}
return oid, nil
}
*/
func (v *Odb) Free() {
runtime.SetFinalizer(v, nil)