tag: accept an Objecter for creating a tag

This lets us create a tag for any kind of object.
This commit is contained in:
Carlos Martín Nieto 2017-07-08 22:55:44 +02:00
parent 7f685a6ee6
commit 916d555644
1 changed files with 9 additions and 10 deletions

19
tag.go
View File

@ -67,8 +67,7 @@ type TagsCollection struct {
repo *Repository repo *Repository
} }
func (c *TagsCollection) Create( func (c *TagsCollection) Create(name string, obj Objecter, tagger *Signature, message string) (*Oid, error) {
name string, commit *Commit, tagger *Signature, message string) (*Oid, error) {
oid := new(Oid) oid := new(Oid)
@ -84,13 +83,13 @@ func (c *TagsCollection) Create(
} }
defer C.git_signature_free(taggerSig) defer C.git_signature_free(taggerSig)
ctarget := commit.ptr
runtime.LockOSThread() runtime.LockOSThread()
defer runtime.UnlockOSThread() defer runtime.UnlockOSThread()
ret := C.git_tag_create(oid.toC(), c.repo.ptr, cname, ctarget, taggerSig, cmessage, 0) o := obj.AsObject()
ret := C.git_tag_create(oid.toC(), c.repo.ptr, cname, o.ptr, taggerSig, cmessage, 0)
runtime.KeepAlive(c) runtime.KeepAlive(c)
runtime.KeepAlive(obj)
if ret < 0 { if ret < 0 {
return nil, MakeGitError(ret) return nil, MakeGitError(ret)
} }
@ -114,7 +113,7 @@ func (c *TagsCollection) Remove(name string) error {
return nil return nil
} }
// CreateLightweight creates a new lightweight tag pointing to a commit // CreateLightweight creates a new lightweight tag pointing to an object
// and returns the id of the target object. // and returns the id of the target object.
// //
// The name of the tag is validated for consistency (see git_tag_create() for the rules // The name of the tag is validated for consistency (see git_tag_create() for the rules
@ -126,20 +125,20 @@ func (c *TagsCollection) Remove(name string) error {
// The created tag is a simple reference and can be queried using // The created tag is a simple reference and can be queried using
// repo.References.Lookup("refs/tags/<name>"). The name of the tag (eg "v1.0.0") // repo.References.Lookup("refs/tags/<name>"). The name of the tag (eg "v1.0.0")
// is queried with ref.Shorthand(). // is queried with ref.Shorthand().
func (c *TagsCollection) CreateLightweight(name string, commit *Commit, force bool) (*Oid, error) { func (c *TagsCollection) CreateLightweight(name string, obj Objecter, force bool) (*Oid, error) {
oid := new(Oid) oid := new(Oid)
cname := C.CString(name) cname := C.CString(name)
defer C.free(unsafe.Pointer(cname)) defer C.free(unsafe.Pointer(cname))
ctarget := commit.ptr
runtime.LockOSThread() runtime.LockOSThread()
defer runtime.UnlockOSThread() defer runtime.UnlockOSThread()
err := C.git_tag_create_lightweight(oid.toC(), c.repo.ptr, cname, ctarget, cbool(force)) o := obj.AsObject()
err := C.git_tag_create_lightweight(oid.toC(), c.repo.ptr, cname, o.ptr, cbool(force))
runtime.KeepAlive(c) runtime.KeepAlive(c)
runtime.KeepAlive(obj)
if err < 0 { if err < 0 {
return nil, MakeGitError(err) return nil, MakeGitError(err)
} }