summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <[email protected]>2016-02-16 21:06:45 -0800
committerIan Lance Taylor <[email protected]>2016-02-16 21:06:45 -0800
commitb70973e5c71b12f7ac42467d6b409ab4c7467dbd (patch)
tree7f9086ead1f262a5e626d44c0d41551148426a61
parent42b11d403d91e25754fe60c63c26371fbb7a89a9 (diff)
parent55594814c9009f9d645aea39a9f917cf82666228 (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--blob.go2
-rw-r--r--odb.go15
-rw-r--r--odb_test.go28
-rw-r--r--repository.go21
-rw-r--r--walk.go4
5 files changed, 69 insertions, 1 deletions
diff --git a/blob.go b/blob.go
index b1fc78a..382bb9e 100644
--- a/blob.go
+++ b/blob.go
@@ -84,7 +84,7 @@ func (repo *Repository) CreateBlobFromChunks(hintPath string, callback BlobChunk
var chintPath *C.char = nil
if len(hintPath) > 0 {
- C.CString(hintPath)
+ chintPath = C.CString(hintPath)
defer C.free(unsafe.Pointer(chintPath))
}
oid := C.git_oid{}
diff --git a/odb.go b/odb.go
index 8e8fba0..dfad507 100644
--- a/odb.go
+++ b/odb.go
@@ -54,6 +54,21 @@ func (v *Odb) AddBackend(backend *OdbBackend, priority int) (err error) {
return nil
}
+func (v *Odb) ReadHeader(oid *Oid) (uint64, ObjectType, error) {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ var sz C.size_t
+ var cotype C.git_otype
+
+ ret := C.git_odb_read_header(&sz, &cotype, v.ptr, oid.toC())
+ if ret < 0 {
+ return 0, C.GIT_OBJ_BAD, MakeGitError(ret)
+ }
+
+ return uint64(sz), ObjectType(cotype), nil
+}
+
func (v *Odb) Exists(oid *Oid) bool {
ret := C.git_odb_exists(v.ptr, oid.toC())
return ret != 0
diff --git a/odb_test.go b/odb_test.go
index 0d765b9..dfd2ad0 100644
--- a/odb_test.go
+++ b/odb_test.go
@@ -6,6 +6,34 @@ import (
"testing"
)
+func TestOdbReadHeader(t *testing.T) {
+ repo := createTestRepo(t)
+ defer cleanupTestRepo(t, repo)
+
+ _, _ = seedTestRepo(t, repo)
+ odb, err := repo.Odb()
+ if err != nil {
+ t.Fatalf("Odb: %v", err)
+ }
+ data := []byte("hello")
+ id, err := odb.Write(data, ObjectBlob)
+ if err != nil {
+ t.Fatalf("odb.Write: %v", err)
+ }
+
+ sz, typ, err := odb.ReadHeader(id)
+ if err != nil {
+ t.Fatalf("ReadHeader: %v", err)
+ }
+
+ if sz != uint64(len(data)) {
+ t.Errorf("ReadHeader got size %d, want %d", sz, len(data))
+ }
+ if typ != ObjectBlob {
+ t.Errorf("ReadHeader got object type %s", typ)
+ }
+}
+
func TestOdbStream(t *testing.T) {
repo := createTestRepo(t)
defer cleanupTestRepo(t, repo)
diff --git a/repository.go b/repository.go
index 62fde6d..12638e1 100644
--- a/repository.go
+++ b/repository.go
@@ -433,3 +433,24 @@ func (r *Repository) StateCleanup() error {
}
return nil
}
+func (r *Repository) AddGitIgnoreRules(rules string) error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ crules := C.CString(rules)
+ defer C.free(unsafe.Pointer(crules))
+ if ret := C.git_ignore_add_rule(r.ptr, crules); ret < 0 {
+ return MakeGitError(ret)
+ }
+ return nil
+}
+
+func (r *Repository) ClearGitIgnoreRules() error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ if ret := C.git_ignore_clear_internal_rules(r.ptr); ret < 0 {
+ return MakeGitError(ret)
+ }
+ return nil
+}
diff --git a/walk.go b/walk.go
index c314f60..60e618d 100644
--- a/walk.go
+++ b/walk.go
@@ -194,6 +194,10 @@ func (v *RevWalk) Iterate(fun RevWalkIterator) (err error) {
return nil
}
+func (v *RevWalk) SimplifyFirstParent() {
+ C.git_revwalk_simplify_first_parent(v.ptr)
+}
+
func (v *RevWalk) Sorting(sm SortType) {
C.git_revwalk_sorting(v.ptr, C.uint(sm))
}