From 054268a63418b03892bfd4c6a509a0294660074b Mon Sep 17 00:00:00 2001 From: Tobias Haar Date: Fri, 24 Jan 2014 01:10:23 +0000 Subject: [PATCH 1/6] added write method --- index.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/index.go b/index.go index ac5148c..fb32010 100644 --- a/index.go +++ b/index.go @@ -49,6 +49,18 @@ func (v *Index) WriteTree() (*Oid, error) { return oid, nil } +func (v *Index) Write() (error) { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ret := C.git_index_write(v.ptr) + if ret < 0 { + return LastError() + } + + return nil +} + func (v *Index) Free() { runtime.SetFinalizer(v, nil) C.git_index_free(v.ptr) From 4ce2eb713bda2cb361f6d2b58502bea758ca980e Mon Sep 17 00:00:00 2001 From: Claudiu-Vlad Ursache Date: Sat, 25 Jan 2014 22:18:32 +0100 Subject: [PATCH 2/6] Add Odb hash function. --- odb.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/odb.go b/odb.go index 638ef74..6d18ce9 100644 --- a/odb.go +++ b/odb.go @@ -79,6 +79,22 @@ func (v *Odb) ForEach() chan *Oid { return ch } +// Hash determines the object-ID (sha1) of a data buffer. +func (v *Odb) Hash(data []byte, otype ObjectType) (oid *Oid, err error) { + oid = new(Oid) + header := (*reflect.SliceHeader)(unsafe.Pointer(&data)) + ptr := (*C.char)(unsafe.Pointer(header.Data)) + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ret := C.git_odb_hash(oid.toC(), unsafe.Pointer(ptr), C.size_t(header.Len), C.git_otype(otype)); + if ret < 0 { + err = LastError() + } + return +} + // NewReadStream opens a read stream from the ODB. Reading from it will give you the // contents of the object. func (v *Odb) NewReadStream(id *Oid) (*OdbReadStream, error) { From 53f2ebce5f5124eff6b8e0ac2c45651d043899fa Mon Sep 17 00:00:00 2001 From: Claudiu-Vlad Ursache Date: Sat, 25 Jan 2014 22:18:43 +0100 Subject: [PATCH 3/6] Test for Odb hash function. --- odb_test.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/odb_test.go b/odb_test.go index 3c7624c..a4f8943 100644 --- a/odb_test.go +++ b/odb_test.go @@ -32,4 +32,31 @@ func TestOdbStream(t *testing.T) { if stream.Id.Cmp(expectedId) != 0 { t.Fatal("Wrong data written") } +} + +func TestOdbHash(t *testing.T) { + + repo := createTestRepo(t) + defer os.RemoveAll(repo.Workdir()) + _, _ = seedTestRepo(t, repo) + + odb, error := repo.Odb() + checkFatal(t, error) + + str := `tree 115fcae49287c82eb55bb275cbbd4556fbed72b7 +parent 66e1c476199ebcd3e304659992233132c5a52c6c +author John Doe 1390682018 +0000 +committer John Doe 1390682018 +0000 + +Initial commit.`; + + oid, error := odb.Hash([]byte(str), ObjectCommit) + checkFatal(t, error) + + coid, error := odb.Write([]byte(str), ObjectCommit) + checkFatal(t, error) + + if oid.Cmp(coid) != 0 { + t.Fatal("Hash and write Oids are different") + } } \ No newline at end of file From bf209ca2ba293116bdd3062ba9ff5ac071f9ddd5 Mon Sep 17 00:00:00 2001 From: Claudiu-Vlad Ursache Date: Sun, 26 Jan 2014 12:36:05 +0100 Subject: [PATCH 4/6] Remove unnecessary cast. --- odb.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/odb.go b/odb.go index 6d18ce9..953791c 100644 --- a/odb.go +++ b/odb.go @@ -83,12 +83,12 @@ func (v *Odb) ForEach() chan *Oid { func (v *Odb) Hash(data []byte, otype ObjectType) (oid *Oid, err error) { oid = new(Oid) header := (*reflect.SliceHeader)(unsafe.Pointer(&data)) - ptr := (*C.char)(unsafe.Pointer(header.Data)) + ptr := unsafe.Pointer(header.Data) runtime.LockOSThread() defer runtime.UnlockOSThread() - ret := C.git_odb_hash(oid.toC(), unsafe.Pointer(ptr), C.size_t(header.Len), C.git_otype(otype)); + ret := C.git_odb_hash(oid.toC(), ptr, C.size_t(header.Len), C.git_otype(otype)); if ret < 0 { err = LastError() } From 53b5ecacbef4a149681734b32f7af3a42db66397 Mon Sep 17 00:00:00 2001 From: lye Date: Thu, 20 Feb 2014 00:24:11 -0600 Subject: [PATCH 5/6] Add Is$Type methods to Reference. This patch adds the following methods to Reference: IsBranch() bool IsRemote() bool IsTag() bool which correspond to the `git_reference_is_$type` functions in libgit2. --- reference.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/reference.go b/reference.go index 8e33354..24b5835 100644 --- a/reference.go +++ b/reference.go @@ -122,6 +122,18 @@ func (v *Reference) Type() ReferenceType { return ReferenceType(C.git_reference_type(v.ptr)) } +func (v *Reference) IsBranch() bool { + return C.git_reference_is_branch(v.ptr) == 1 +} + +func (v *Reference) IsRemote() bool { + return C.git_reference_is_remote(v.ptr) == 1 +} + +func (v *Reference) IsTag() bool { + return C.git_reference_is_tag(v.ptr) == 1 +} + func (v *Reference) Free() { runtime.SetFinalizer(v, nil) C.git_reference_free(v.ptr) From c6d1bde37cc7f3bd213fc182fd9f60a7cd685419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sun, 23 Feb 2014 16:08:19 +0100 Subject: [PATCH 6/6] Return SubmoduleRecurse --- submodule.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/submodule.go b/submodule.go index fa1c436..9abf333 100644 --- a/submodule.go +++ b/submodule.go @@ -237,14 +237,10 @@ func (sub *Submodule) SetUpdate(update SubmoduleUpdate) SubmoduleUpdate { return SubmoduleUpdate(o) } -func (sub *Submodule) FetchRecurseSubmodules() bool { - if 0 == C.git_submodule_fetch_recurse_submodules(sub.ptr) { - return false - } - return true +func (sub *Submodule) FetchRecurseSubmodules() SubmoduleRecurse { + return SubmoduleRecurse(C.git_submodule_fetch_recurse_submodules(sub.ptr)); } - func (sub *Submodule) SetFetchRecurseSubmodules(recurse SubmoduleRecurse) error { runtime.LockOSThread() defer runtime.UnlockOSThread()