diff options
| author | Mark Probst <[email protected]> | 2015-03-11 16:10:32 -0700 |
|---|---|---|
| committer | Mark Probst <[email protected]> | 2015-03-23 12:02:16 -0700 |
| commit | 43102043fb5311939e9ec50f7210ffb51183684a (patch) | |
| tree | a1d80e6cfa7f09dd24f28e342ce120a802968321 | |
| parent | a2878cf7b2fc94255c92253420f5df41a42b47db (diff) | |
Add Commit.Amend
| -rw-r--r-- | commit.go | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -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 +} |
