While we already have wrappers for `git_object_lookup`, there are none
yet for the prefixed variant where only the first n bytes of the OID are
used for the lookup. This commit adds them.
(cherry picked from commit 37b81b61f1
)
Co-authored-by: Patrick Steinhardt <ps@pks.im>
This commit is contained in:
parent
27f87bd821
commit
f58d71b8a9
|
@ -185,10 +185,30 @@ func (v *Repository) lookupType(id *Oid, t ObjectType) (*Object, error) {
|
||||||
return allocObject(ptr, v), nil
|
return allocObject(ptr, v), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Repository) lookupPrefixType(id *Oid, prefix uint, t ObjectType) (*Object, error) {
|
||||||
|
var ptr *C.git_object
|
||||||
|
|
||||||
|
runtime.LockOSThread()
|
||||||
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
|
ret := C.git_object_lookup_prefix(&ptr, v.ptr, id.toC(), C.size_t(prefix), C.git_otype(t))
|
||||||
|
runtime.KeepAlive(id)
|
||||||
|
if ret < 0 {
|
||||||
|
return nil, MakeGitError(ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
return allocObject(ptr, v), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Repository) Lookup(id *Oid) (*Object, error) {
|
func (v *Repository) Lookup(id *Oid) (*Object, error) {
|
||||||
return v.lookupType(id, ObjectAny)
|
return v.lookupType(id, ObjectAny)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LookupPrefix looks up an object by its OID given a prefix of its identifier.
|
||||||
|
func (v *Repository) LookupPrefix(id *Oid, prefix uint) (*Object, error) {
|
||||||
|
return v.lookupPrefixType(id, prefix, ObjectAny)
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupTree(id *Oid) (*Tree, error) {
|
func (v *Repository) LookupTree(id *Oid) (*Tree, error) {
|
||||||
obj, err := v.lookupType(id, ObjectTree)
|
obj, err := v.lookupType(id, ObjectTree)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -199,6 +219,17 @@ func (v *Repository) LookupTree(id *Oid) (*Tree, error) {
|
||||||
return obj.AsTree()
|
return obj.AsTree()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LookupPrefixTree looks up a tree by its OID given a prefix of its identifier.
|
||||||
|
func (v *Repository) LookupPrefixTree(id *Oid, prefix uint) (*Tree, error) {
|
||||||
|
obj, err := v.lookupPrefixType(id, prefix, ObjectTree)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer obj.Free()
|
||||||
|
|
||||||
|
return obj.AsTree()
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupCommit(id *Oid) (*Commit, error) {
|
func (v *Repository) LookupCommit(id *Oid) (*Commit, error) {
|
||||||
obj, err := v.lookupType(id, ObjectCommit)
|
obj, err := v.lookupType(id, ObjectCommit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -209,6 +240,17 @@ func (v *Repository) LookupCommit(id *Oid) (*Commit, error) {
|
||||||
return obj.AsCommit()
|
return obj.AsCommit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LookupPrefixCommit looks up a commit by its OID given a prefix of its identifier.
|
||||||
|
func (v *Repository) LookupPrefixCommit(id *Oid, prefix uint) (*Commit, error) {
|
||||||
|
obj, err := v.lookupPrefixType(id, prefix, ObjectCommit)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer obj.Free()
|
||||||
|
|
||||||
|
return obj.AsCommit()
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupBlob(id *Oid) (*Blob, error) {
|
func (v *Repository) LookupBlob(id *Oid) (*Blob, error) {
|
||||||
obj, err := v.lookupType(id, ObjectBlob)
|
obj, err := v.lookupType(id, ObjectBlob)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -219,6 +261,17 @@ func (v *Repository) LookupBlob(id *Oid) (*Blob, error) {
|
||||||
return obj.AsBlob()
|
return obj.AsBlob()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LookupPrefixBlob looks up a blob by its OID given a prefix of its identifier.
|
||||||
|
func (v *Repository) LookupPrefixBlob(id *Oid, prefix uint) (*Blob, error) {
|
||||||
|
obj, err := v.lookupPrefixType(id, prefix, ObjectBlob)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer obj.Free()
|
||||||
|
|
||||||
|
return obj.AsBlob()
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupTag(id *Oid) (*Tag, error) {
|
func (v *Repository) LookupTag(id *Oid) (*Tag, error) {
|
||||||
obj, err := v.lookupType(id, ObjectTag)
|
obj, err := v.lookupType(id, ObjectTag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -229,6 +282,17 @@ func (v *Repository) LookupTag(id *Oid) (*Tag, error) {
|
||||||
return obj.AsTag()
|
return obj.AsTag()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LookupPrefixTag looks up a tag by its OID given a prefix of its identifier.
|
||||||
|
func (v *Repository) LookupPrefixTag(id *Oid, prefix uint) (*Tag, error) {
|
||||||
|
obj, err := v.lookupPrefixType(id, prefix, ObjectTag)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer obj.Free()
|
||||||
|
|
||||||
|
return obj.AsTag()
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Repository) Head() (*Reference, error) {
|
func (v *Repository) Head() (*Reference, error) {
|
||||||
var ptr *C.git_reference
|
var ptr *C.git_reference
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue