Merge commit 'refs/pull/53/head' of github.com:libgit2/git2go
On top: fix git_buf handling and rename signature This fixes #57, #54. Conflicts: git.go reference.go repository.go submodule.go
This commit is contained in:
commit
1b09b03c0e
|
@ -94,6 +94,11 @@ func (v *Signature) Offset() int {
|
|||
}
|
||||
|
||||
func (sig *Signature) toC() *C.git_signature {
|
||||
|
||||
if sig == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var out *C.git_signature
|
||||
|
||||
name := C.CString(sig.Name)
|
||||
|
|
21
git.go
21
git.go
|
@ -93,7 +93,7 @@ func (oid *Oid) Equal(oid2 *Oid) bool {
|
|||
}
|
||||
|
||||
func (oid *Oid) IsZero() bool {
|
||||
for _, a := range(oid.bytes) {
|
||||
for _, a := range oid.bytes {
|
||||
if a != '0' {
|
||||
return false
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ type GitError struct {
|
|||
Code int
|
||||
}
|
||||
|
||||
func (e GitError) Error() string{
|
||||
func (e GitError) Error() string {
|
||||
return e.Message
|
||||
}
|
||||
|
||||
|
@ -147,14 +147,14 @@ func LastError() error {
|
|||
}
|
||||
|
||||
func cbool(b bool) C.int {
|
||||
if (b) {
|
||||
if b {
|
||||
return C.int(1)
|
||||
}
|
||||
return C.int(0)
|
||||
}
|
||||
|
||||
func ucbool(b bool) C.uint {
|
||||
if (b) {
|
||||
if b {
|
||||
return C.uint(1)
|
||||
}
|
||||
return C.uint(0)
|
||||
|
@ -167,17 +167,16 @@ func Discover(start string, across_fs bool, ceiling_dirs []string) (string, erro
|
|||
cstart := C.CString(start)
|
||||
defer C.free(unsafe.Pointer(cstart))
|
||||
|
||||
retpath := (*C.char)(C.malloc(C.GIT_PATH_MAX))
|
||||
defer C.free(unsafe.Pointer(retpath))
|
||||
var buf C.git_buf
|
||||
defer C.git_buf_free(&buf)
|
||||
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
r := C.git_repository_discover(retpath, C.GIT_PATH_MAX, cstart, cbool(across_fs), ceildirs)
|
||||
|
||||
if r == 0 {
|
||||
return C.GoString(retpath), nil
|
||||
ret := C.git_repository_discover(&buf, cstart, cbool(across_fs), ceildirs)
|
||||
if ret < 0 {
|
||||
return "", LastError()
|
||||
}
|
||||
|
||||
return "", LastError()
|
||||
return C.GoString(buf.ptr), nil
|
||||
}
|
||||
|
|
32
reference.go
32
reference.go
|
@ -11,6 +11,7 @@ import (
|
|||
)
|
||||
|
||||
type ReferenceType int
|
||||
|
||||
const (
|
||||
ReferenceSymbolic ReferenceType = C.GIT_REF_SYMBOLIC
|
||||
ReferenceOid = C.GIT_REF_OID
|
||||
|
@ -27,15 +28,22 @@ func newReferenceFromC(ptr *C.git_reference) *Reference {
|
|||
return ref
|
||||
}
|
||||
|
||||
func (v *Reference) SetSymbolicTarget(target string) (*Reference, error) {
|
||||
func (v *Reference) SetSymbolicTarget(target string, sig *Signature, msg string) (*Reference, error) {
|
||||
var ptr *C.git_reference
|
||||
|
||||
ctarget := C.CString(target)
|
||||
defer C.free(unsafe.Pointer(ctarget))
|
||||
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
ret := C.git_reference_symbolic_set_target(&ptr, v.ptr, ctarget)
|
||||
csig := sig.toC()
|
||||
defer C.free(unsafe.Pointer(csig))
|
||||
|
||||
cmsg := C.CString(msg)
|
||||
defer C.free(unsafe.Pointer(cmsg))
|
||||
|
||||
ret := C.git_reference_symbolic_set_target(&ptr, v.ptr, ctarget, csig, cmsg)
|
||||
if ret < 0 {
|
||||
return nil, LastError()
|
||||
}
|
||||
|
@ -43,13 +51,19 @@ func (v *Reference) SetSymbolicTarget(target string) (*Reference, error) {
|
|||
return newReferenceFromC(ptr), nil
|
||||
}
|
||||
|
||||
func (v *Reference) SetTarget(target *Oid) (*Reference, error) {
|
||||
func (v *Reference) SetTarget(target *Oid, sig *Signature, msg string) (*Reference, error) {
|
||||
var ptr *C.git_reference
|
||||
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
ret := C.git_reference_set_target(&ptr, v.ptr, target.toC())
|
||||
csig := sig.toC()
|
||||
defer C.free(unsafe.Pointer(csig))
|
||||
|
||||
cmsg := C.CString(msg)
|
||||
defer C.free(unsafe.Pointer(cmsg))
|
||||
|
||||
ret := C.git_reference_set_target(&ptr, v.ptr, target.toC(), csig, cmsg)
|
||||
if ret < 0 {
|
||||
return nil, LastError()
|
||||
}
|
||||
|
@ -71,15 +85,21 @@ func (v *Reference) Resolve() (*Reference, error) {
|
|||
return newReferenceFromC(ptr), nil
|
||||
}
|
||||
|
||||
func (v *Reference) Rename(name string, force bool) (*Reference, error) {
|
||||
func (v *Reference) Rename(name string, force bool, sig *Signature, msg string) (*Reference, error) {
|
||||
var ptr *C.git_reference
|
||||
cname := C.CString(name)
|
||||
defer C.free(unsafe.Pointer(cname))
|
||||
|
||||
csig := sig.toC()
|
||||
defer C.free(unsafe.Pointer(csig))
|
||||
|
||||
cmsg := C.CString(msg)
|
||||
defer C.free(unsafe.Pointer(cmsg))
|
||||
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
ret := C.git_reference_rename(&ptr, v.ptr, cname, cbool(force))
|
||||
ret := C.git_reference_rename(&ptr, v.ptr, cname, cbool(force), csig, cmsg)
|
||||
|
||||
if ret < 0 {
|
||||
return nil, LastError()
|
||||
|
|
|
@ -14,7 +14,14 @@ func TestRefModification(t *testing.T) {
|
|||
|
||||
commitId, treeId := seedTestRepo(t, repo)
|
||||
|
||||
_, err := repo.CreateReference("refs/tags/tree", treeId, true)
|
||||
loc, err := time.LoadLocation("Europe/Berlin")
|
||||
checkFatal(t, err)
|
||||
sig := &Signature{
|
||||
Name: "Rand Om Hacker",
|
||||
Email: "random@hacker.com",
|
||||
When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
|
||||
}
|
||||
_, err = repo.CreateReference("refs/tags/tree", treeId, true, sig, "testTreeTag")
|
||||
checkFatal(t, err)
|
||||
|
||||
tag, err := repo.LookupReference("refs/tags/tree")
|
||||
|
@ -45,7 +52,7 @@ func TestRefModification(t *testing.T) {
|
|||
t.Fatalf("Wrong ref target")
|
||||
}
|
||||
|
||||
_, err = tag.Rename("refs/tags/renamed", false)
|
||||
_, err = tag.Rename("refs/tags/renamed", false, nil, "")
|
||||
checkFatal(t, err)
|
||||
tag, err = repo.LookupReference("refs/tags/renamed")
|
||||
checkFatal(t, err)
|
||||
|
@ -78,13 +85,13 @@ func TestIterator(t *testing.T) {
|
|||
commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)
|
||||
checkFatal(t, err)
|
||||
|
||||
_, err = repo.CreateReference("refs/heads/one", commitId, true)
|
||||
_, err = repo.CreateReference("refs/heads/one", commitId, true, sig, "headOne")
|
||||
checkFatal(t, err)
|
||||
|
||||
_, err = repo.CreateReference("refs/heads/two", commitId, true)
|
||||
_, err = repo.CreateReference("refs/heads/two", commitId, true, sig, "headTwo")
|
||||
checkFatal(t, err)
|
||||
|
||||
_, err = repo.CreateReference("refs/heads/three", commitId, true)
|
||||
_, err = repo.CreateReference("refs/heads/three", commitId, true, sig, "headThree")
|
||||
checkFatal(t, err)
|
||||
|
||||
iter, err := repo.NewReferenceIterator()
|
||||
|
@ -108,7 +115,6 @@ func TestIterator(t *testing.T) {
|
|||
t.Fatal("Iteration not over")
|
||||
}
|
||||
|
||||
|
||||
sort.Strings(list)
|
||||
compareStringList(t, expected, list)
|
||||
|
||||
|
@ -129,7 +135,6 @@ func TestIterator(t *testing.T) {
|
|||
t.Fatalf("Wrong number of references returned %v", count)
|
||||
}
|
||||
|
||||
|
||||
// test the channel iteration
|
||||
list = []string{}
|
||||
iter, err = repo.NewReferenceIterator()
|
||||
|
|
|
@ -146,15 +146,22 @@ func (v *Repository) LookupReference(name string) (*Reference, error) {
|
|||
return newReferenceFromC(ptr), nil
|
||||
}
|
||||
|
||||
func (v *Repository) CreateReference(name string, oid *Oid, force bool) (*Reference, error) {
|
||||
func (v *Repository) CreateReference(name string, oid *Oid, force bool, sig *Signature, msg string) (*Reference, error) {
|
||||
cname := C.CString(name)
|
||||
defer C.free(unsafe.Pointer(cname))
|
||||
|
||||
csig := sig.toC()
|
||||
defer C.free(unsafe.Pointer(csig))
|
||||
|
||||
cmsg := C.CString(msg)
|
||||
defer C.free(unsafe.Pointer(cmsg))
|
||||
|
||||
var ptr *C.git_reference
|
||||
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
ecode := C.git_reference_create(&ptr, v.ptr, cname, oid.toC(), cbool(force))
|
||||
ecode := C.git_reference_create(&ptr, v.ptr, cname, oid.toC(), cbool(force), csig, cmsg)
|
||||
if ecode < 0 {
|
||||
return nil, LastError()
|
||||
}
|
||||
|
@ -162,17 +169,25 @@ func (v *Repository) CreateReference(name string, oid *Oid, force bool) (*Refere
|
|||
return newReferenceFromC(ptr), nil
|
||||
}
|
||||
|
||||
func (v *Repository) CreateSymbolicReference(name, target string, force bool) (*Reference, error) {
|
||||
func (v *Repository) CreateSymbolicReference(name, target string, force bool, sig *Signature, msg string) (*Reference, error) {
|
||||
cname := C.CString(name)
|
||||
defer C.free(unsafe.Pointer(cname))
|
||||
|
||||
ctarget := C.CString(target)
|
||||
defer C.free(unsafe.Pointer(ctarget))
|
||||
|
||||
csig := sig.toC()
|
||||
defer C.free(unsafe.Pointer(csig))
|
||||
|
||||
cmsg := C.CString(msg)
|
||||
defer C.free(unsafe.Pointer(cmsg))
|
||||
|
||||
var ptr *C.git_reference
|
||||
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
ecode := C.git_reference_symbolic_create(&ptr, v.ptr, cname, ctarget, cbool(force))
|
||||
ecode := C.git_reference_symbolic_create(&ptr, v.ptr, cname, ctarget, cbool(force), csig, cmsg)
|
||||
if ecode < 0 {
|
||||
return nil, LastError()
|
||||
}
|
||||
|
@ -232,7 +247,7 @@ func (v *Repository) CreateCommit(
|
|||
ret := C.git_commit_create(
|
||||
oid.toC(), v.ptr, cref,
|
||||
authorSig, committerSig,
|
||||
nil, cmsg, tree.ptr, C.int(nparents), parentsarg)
|
||||
nil, cmsg, tree.ptr, C.size_t(nparents), parentsarg)
|
||||
|
||||
if ret < 0 {
|
||||
return nil, LastError()
|
||||
|
|
13
submodule.go
13
submodule.go
|
@ -56,6 +56,14 @@ const (
|
|||
SubmoduleStatusWdUntracked = C.GIT_SUBMODULE_STATUS_WD_UNTRACKED
|
||||
)
|
||||
|
||||
type SubmoduleRecurse int
|
||||
|
||||
const (
|
||||
SubmoduleRecurseNo SubmoduleRecurse = C.GIT_SUBMODULE_RECURSE_NO
|
||||
SubmoduleRecurseYes = C.GIT_SUBMODULE_RECURSE_YES
|
||||
SubmoduleRecurseOndemand = C.GIT_SUBMODULE_RECURSE_ONDEMAND
|
||||
)
|
||||
|
||||
func SubmoduleStatusIsUnmodified(status int) bool {
|
||||
o := SubmoduleStatus(status) & ^(SubmoduleStatusInHead | SubmoduleStatusInIndex |
|
||||
SubmoduleStatusInConfig | SubmoduleStatusInWd)
|
||||
|
@ -236,11 +244,12 @@ func (sub *Submodule) FetchRecurseSubmodules() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (sub *Submodule) SetFetchRecurseSubmodules(v bool) error {
|
||||
|
||||
func (sub *Submodule) SetFetchRecurseSubmodules(recurse SubmoduleRecurse) error {
|
||||
runtime.LockOSThread()
|
||||
defer runtime.UnlockOSThread()
|
||||
|
||||
ret := C.git_submodule_set_fetch_recurse_submodules(sub.ptr, cbool(v))
|
||||
ret := C.git_submodule_set_fetch_recurse_submodules(sub.ptr, C.git_submodule_recurse_t(recurse))
|
||||
if ret < 0 {
|
||||
return LastError()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue