summaryrefslogtreecommitdiff
path: root/repository.go
diff options
context:
space:
mode:
authorFrank Benkstein <[email protected]>2014-06-09 23:19:17 +0200
committerFrank Benkstein <[email protected]>2014-06-09 23:19:17 +0200
commitbbdc7a825d1c7e65516cbc92e72335bf1f35c2f0 (patch)
tree878f12f83c0701cd849c0458deb29cf2273735f4 /repository.go
parent3ca566e105e8156a2583f36e9dd9e06ed3b3564c (diff)
add support for annotated tags
Diffstat (limited to 'repository.go')
-rw-r--r--repository.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/repository.go b/repository.go
index 2354f99..c380de1 100644
--- a/repository.go
+++ b/repository.go
@@ -164,6 +164,15 @@ func (v *Repository) LookupBlob(id *Oid) (*Blob, error) {
return obj.(*Blob), nil
}
+func (v *Repository) LookupTag(id *Oid) (*Tag, error) {
+ obj, err := v.lookupType(id, ObjectTag)
+ if err != nil {
+ return nil, err
+ }
+
+ return obj.(*Tag), nil
+}
+
func (v *Repository) LookupReference(name string) (*Reference, error) {
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
@@ -356,6 +365,30 @@ func (v *Repository) CreateCommit(
return oid, nil
}
+func (v *Repository) CreateTag(
+ name string, commit *Commit, tagger *Signature, message string) (*Oid, error) {
+
+ oid := new(Oid)
+
+ cname := C.CString(name)
+ defer C.free(unsafe.Pointer(cname))
+
+ cmessage := C.CString(message)
+ defer C.free(unsafe.Pointer(cmessage))
+
+ taggerSig := tagger.toC()
+ defer C.git_signature_free(taggerSig)
+
+ ctarget := commit.gitObject.ptr
+
+ ret := C.git_tag_create(oid.toC(), v.ptr, cname, ctarget, taggerSig, cmessage, 0)
+ if ret < 0 {
+ return nil, MakeGitError(ret)
+ }
+
+ return oid, nil
+}
+
func (v *Odb) Free() {
runtime.SetFinalizer(v, nil)
C.git_odb_free(v.ptr)