Use COpaquePointer directly

This commit is contained in:
Matt Diephouse 2015-03-09 17:32:48 -04:00
parent 7ee768f37f
commit 66ba594070
5 changed files with 35 additions and 50 deletions

View File

@ -107,15 +107,13 @@ public struct Branch: ReferenceType {
var oid: OID
if git_reference_type(pointer).value == GIT_REF_SYMBOLIC.value {
let resolved = UnsafeMutablePointer<COpaquePointer>.alloc(1)
let success = git_reference_resolve(resolved, pointer)
var resolved: COpaquePointer = nil
let success = git_reference_resolve(&resolved, pointer)
if success != GIT_OK.value {
resolved.dealloc(1)
return nil
}
oid = OID(git_reference_target(resolved.memory).memory)
git_reference_free(resolved.memory)
resolved.dealloc(1)
oid = OID(git_reference_target(resolved).memory)
git_reference_free(resolved)
} else {
oid = OID(git_reference_target(pointer).memory)
}
@ -184,15 +182,14 @@ public enum TagReference: ReferenceType {
let repo = git_reference_owner(pointer)
var oid = git_reference_target(pointer).memory
let pointer = UnsafeMutablePointer<COpaquePointer>.alloc(1)
let result = git_object_lookup(pointer, repo, &oid, GIT_OBJ_TAG)
var pointer: COpaquePointer = nil
let result = git_object_lookup(&pointer, repo, &oid, GIT_OBJ_TAG)
if result == GIT_OK.value {
self = .Annotated(name, Tag(pointer.memory))
self = .Annotated(name, Tag(pointer))
} else {
self = .Lightweight(name, OID(oid))
}
git_object_free(pointer.memory)
pointer.dealloc(1)
git_object_free(pointer)
}
}

View File

@ -33,16 +33,14 @@ final public class Repository {
///
/// Returns a `Result` with a `Repository` or an error.
class public func atURL(URL: NSURL) -> Result<Repository, NSError> {
let pointer = UnsafeMutablePointer<COpaquePointer>.alloc(1)
let result = git_repository_open(pointer, URL.fileSystemRepresentation)
var pointer: COpaquePointer = nil
let result = git_repository_open(&pointer, URL.fileSystemRepresentation)
if result != GIT_OK.value {
pointer.dealloc(1)
return failure(libGit2Error(result, libGit2PointOfFailure: "git_repository_open"))
}
let repository = Repository(pointer.memory)
pointer.dealloc(1)
let repository = Repository(pointer)
return success(repository)
}
@ -83,19 +81,17 @@ final public class Repository {
/// Returns the result of calling `transform` or an error if the object
/// cannot be loaded.
func withLibgit2Object<T>(oid: OID, type: git_otype, transform: COpaquePointer -> Result<T, NSError>) -> Result<T, NSError> {
let pointer = UnsafeMutablePointer<COpaquePointer>.alloc(1)
var pointer: COpaquePointer = nil
let repository = self.pointer
var oid = oid.oid
let result = git_object_lookup(pointer, repository, &oid, type)
let result = git_object_lookup(&pointer, repository, &oid, type)
if result != GIT_OK.value {
pointer.dealloc(1)
return failure(libGit2Error(result, libGit2PointOfFailure: "git_object_lookup"))
}
let value = transform(pointer.memory)
git_object_free(pointer.memory)
pointer.dealloc(1)
let value = transform(pointer)
git_object_free(pointer)
return value
}
@ -230,18 +226,16 @@ final public class Repository {
///
/// Returns the remote if it exists, or an error.
public func remoteWithName(name: String) -> Result<Remote, NSError> {
let pointer = UnsafeMutablePointer<COpaquePointer>.alloc(1)
var pointer: COpaquePointer = nil
let repository = self.pointer
let result = git_remote_lookup(pointer, repository, name)
let result = git_remote_lookup(&pointer, repository, name)
if result != GIT_OK.value {
pointer.dealloc(1)
return failure(libGit2Error(result, libGit2PointOfFailure: "git_remote_lookup"))
}
let value = Remote(pointer.memory)
git_remote_free(pointer.memory)
pointer.dealloc(1)
let value = Remote(pointer)
git_remote_free(pointer)
return success(value)
}
@ -282,19 +276,16 @@ final public class Repository {
/// reference is a tag, a `TagReference` will be returned. Otherwise, a
/// `Reference` will be returned.
public func referenceWithName(name: String) -> Result<ReferenceType, NSError> {
let pointer = UnsafeMutablePointer<COpaquePointer>.alloc(1)
var pointer: COpaquePointer = nil
let repository = self.pointer
let result = git_reference_lookup(pointer, repository, name)
let result = git_reference_lookup(&pointer, repository, name)
if result != GIT_OK.value {
pointer.dealloc(1)
return failure(libGit2Error(result, libGit2PointOfFailure: "git_reference_lookup"))
}
let value = referenceWithLibGit2Reference(pointer.memory)
git_reference_free(pointer.memory)
pointer.dealloc(1)
let value = referenceWithLibGit2Reference(pointer)
git_reference_free(pointer)
return success(value)
}

View File

@ -15,11 +15,10 @@ func from_git_object<T>(repository: Repository, oid: OID, f: COpaquePointer -> T
let repository = repository.pointer
var oid = oid.oid
let pointer = UnsafeMutablePointer<COpaquePointer>.alloc(1)
git_object_lookup(pointer, repository, &oid, GIT_OBJ_ANY)
let result = f(pointer.memory)
git_object_free(pointer.memory)
pointer.dealloc(1)
var pointer: COpaquePointer = nil
git_object_lookup(&pointer, repository, &oid, GIT_OBJ_ANY)
let result = f(pointer)
git_object_free(pointer)
return result
}

View File

@ -14,11 +14,10 @@ import Quick
func from_git_reference<T>(repository: Repository, name: String, f: COpaquePointer -> T) -> T {
let repository = repository.pointer
let pointer = UnsafeMutablePointer<COpaquePointer>.alloc(1)
git_reference_lookup(pointer, repository, name)
let result = f(pointer.memory)
git_object_free(pointer.memory)
pointer.dealloc(1)
var pointer: COpaquePointer = nil
git_reference_lookup(&pointer, repository, name)
let result = f(pointer)
git_object_free(pointer)
return result
}

View File

@ -14,11 +14,10 @@ import Quick
func with_git_remote<T>(repository: Repository, name: String, f: COpaquePointer -> T) -> T {
let repository = repository.pointer
let pointer = UnsafeMutablePointer<COpaquePointer>.alloc(1)
git_remote_lookup(pointer, repository, name)
let result = f(pointer.memory)
git_object_free(pointer.memory)
pointer.dealloc(1)
var pointer: COpaquePointer = nil
git_remote_lookup(&pointer, repository, name)
let result = f(pointer)
git_object_free(pointer)
return result
}