summaryrefslogtreecommitdiff
path: root/repository.go
diff options
context:
space:
mode:
Diffstat (limited to 'repository.go')
-rw-r--r--repository.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/repository.go b/repository.go
index 07b2605..f42f929 100644
--- a/repository.go
+++ b/repository.go
@@ -185,10 +185,30 @@ func (v *Repository) lookupType(id *Oid, t ObjectType) (*Object, error) {
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_object_t(t))
+ runtime.KeepAlive(id)
+ if ret < 0 {
+ return nil, MakeGitError(ret)
+ }
+
+ return allocObject(ptr, v), nil
+}
+
func (v *Repository) Lookup(id *Oid) (*Object, error) {
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) {
obj, err := v.lookupType(id, ObjectTree)
if err != nil {
@@ -199,6 +219,17 @@ func (v *Repository) LookupTree(id *Oid) (*Tree, error) {
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) {
obj, err := v.lookupType(id, ObjectCommit)
if err != nil {
@@ -209,6 +240,17 @@ func (v *Repository) LookupCommit(id *Oid) (*Commit, error) {
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) {
obj, err := v.lookupType(id, ObjectBlob)
if err != nil {
@@ -219,6 +261,17 @@ func (v *Repository) LookupBlob(id *Oid) (*Blob, error) {
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) {
obj, err := v.lookupType(id, ObjectTag)
if err != nil {
@@ -229,6 +282,17 @@ func (v *Repository) LookupTag(id *Oid) (*Tag, error) {
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) {
var ptr *C.git_reference