forked from libgit2/git2go
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommit.go
More file actions
Latest commit
110 lines (85 loc) · 2.19 KB
/
Copy pathcommit.go
File metadata and controls
110 lines (85 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package git
/*
#include <git2.h>
extern int _go_git_treewalk(git_tree *tree, git_treewalk_mode mode, void *ptr);
*/
import"C"
import (
"runtime"
"unsafe"
)
// Commit
typeCommitstruct {
gitObject
cast_ptr*C.git_commit
}
func (cCommit) Message() string {
returnC.GoString(C.git_commit_message(c.cast_ptr))
}
func (cCommit) Summary() string {
returnC.GoString(C.git_commit_summary(c.cast_ptr))
}
func (cCommit) Tree() (*Tree, error) {
varptr*C.git_tree
runtime.LockOSThread()
deferruntime.UnlockOSThread()
err:=C.git_commit_tree(&ptr, c.cast_ptr)
iferr<0 {
returnnil, MakeGitError(err)
}
returnallocObject((*C.git_object)(ptr), c.repo).(*Tree), nil
}
func (cCommit) TreeId() *Oid {
returnnewOidFromC(C.git_commit_tree_id(c.cast_ptr))
}
func (cCommit) Author() *Signature {
cast_ptr:=C.git_commit_author(c.cast_ptr)
returnnewSignatureFromC(cast_ptr)
}
func (cCommit) Committer() *Signature {
cast_ptr:=C.git_commit_committer(c.cast_ptr)
returnnewSignatureFromC(cast_ptr)
}
func (c*Commit) Parent(nuint) *Commit {
varcobj*C.git_commit
ret:=C.git_commit_parent(&cobj, c.cast_ptr, C.uint(n))
ifret!=0 {
returnnil
}
returnallocObject((*C.git_object)(cobj), c.repo).(*Commit)
}
func (c*Commit) ParentId(nuint) *Oid {
returnnewOidFromC(C.git_commit_parent_id(c.cast_ptr, C.uint(n)))
}
func (c*Commit) ParentCount() uint {
returnuint(C.git_commit_parentcount(c.cast_ptr))
}
func (c*Commit) Amend(refnamestring, author, committer*Signature, messagestring, tree*Tree) (*Oid, error) {
varcref*C.char
ifrefname=="" {
cref=nil
} else {
cref=C.CString(refname)
deferC.free(unsafe.Pointer(cref))
}
cmsg:=C.CString(message)
deferC.free(unsafe.Pointer(cmsg))
runtime.LockOSThread()
deferruntime.UnlockOSThread()
authorSig, err:=author.toC()
iferr!=nil {
returnnil, err
}
deferC.git_signature_free(authorSig)
committerSig, err:=committer.toC()
iferr!=nil {
returnnil, err
}
deferC.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)
ifcerr<0 {
returnnil, MakeGitError(cerr)
}
returnoid, nil
}