summaryrefslogtreecommitdiff
path: root/commit.go
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2015-06-05 02:02:37 +0200
committerCarlos Martín Nieto <[email protected]>2015-06-08 04:07:49 +0200
commit85fde1fcfbc3fd6000b8fa1a4041b4c314a92b2f (patch)
tree80b29ec86120ba092fcd05c05e28e6a65d1f2b13 /commit.go
parent1011b03e4139580679bb93183a781edd11c22a97 (diff)
parent53c158fbd7e5f4dac787f5c3a7107fcb4116f676 (diff)
Merge remote-tracking branch 'origin/master' into next
Diffstat (limited to 'commit.go')
-rw-r--r--commit.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/commit.go b/commit.go
index 57e1a77..52f7c01 100644
--- a/commit.go
+++ b/commit.go
@@ -9,6 +9,7 @@ import "C"
import (
"runtime"
+ "unsafe"
)
// Commit
@@ -70,3 +71,40 @@ func (c *Commit) ParentId(n uint) *Oid {
func (c *Commit) ParentCount() uint {
return uint(C.git_commit_parentcount(c.cast_ptr))
}
+
+func (c *Commit) Amend(refname string, author, committer *Signature, message string, tree *Tree) (*Oid, error) {
+ var cref *C.char
+ if refname == "" {
+ cref = nil
+ } else {
+ cref = C.CString(refname)
+ defer C.free(unsafe.Pointer(cref))
+ }
+
+ cmsg := C.CString(message)
+ defer C.free(unsafe.Pointer(cmsg))
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ authorSig, err := author.toC()
+ if err != nil {
+ return nil, err
+ }
+ defer C.git_signature_free(authorSig)
+
+ committerSig, err := committer.toC()
+ if err != nil {
+ return nil, err
+ }
+ defer C.git_signature_free(committerSig)
+
+ oid := new(Oid)
+
+ cerr := C.git_commit_amend(oid.toC(), c.cast_ptr, cref, authorSig, committerSig, nil, cmsg, tree.cast_ptr)
+ if cerr < 0 {
+ return nil, MakeGitError(cerr)
+ }
+
+ return oid, nil
+}