mirror of
https://github.com/gosticks/SwiftGit2.git
synced 2025-10-16 11:55:34 +00:00
Add a Signature struct
This commit is contained in:
parent
cfe199bc94
commit
b49cbacfd7
@ -6,12 +6,36 @@
|
|||||||
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
|
// Copyright (c) 2014 GitHub, Inc. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
/// A git object.
|
/// A git object.
|
||||||
public protocol Object {
|
public protocol Object {
|
||||||
/// The OID of the object.
|
/// The OID of the object.
|
||||||
var oid: OID { get }
|
var oid: OID { get }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct Signature {
|
||||||
|
/// The name of the person.
|
||||||
|
public let name: String
|
||||||
|
|
||||||
|
/// The email of the person.
|
||||||
|
public let email: String
|
||||||
|
|
||||||
|
/// The time when the action happened.
|
||||||
|
public let time: NSDate
|
||||||
|
|
||||||
|
/// The time zone that `time` should be interpreted relative to.
|
||||||
|
public let timeZone: NSTimeZone
|
||||||
|
|
||||||
|
/// Create an instance with a libgit2 `git_signature`.
|
||||||
|
public init(signature: git_signature) {
|
||||||
|
name = String.fromCString(signature.name)!
|
||||||
|
email = String.fromCString(signature.email)!
|
||||||
|
time = NSDate(timeIntervalSince1970: NSTimeInterval(signature.when.time))
|
||||||
|
timeZone = NSTimeZone(forSecondsFromGMT: NSInteger(60 * signature.when.offset))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A git commit.
|
/// A git commit.
|
||||||
public struct Commit: Object {
|
public struct Commit: Object {
|
||||||
public let oid: OID
|
public let oid: OID
|
||||||
|
|||||||
@ -11,16 +11,48 @@ import SwiftGit2
|
|||||||
import Nimble
|
import Nimble
|
||||||
import Quick
|
import Quick
|
||||||
|
|
||||||
class CommitSpec: QuickSpec {
|
func from_git_object<T>(repository: Repository, oid: OID, f: COpaquePointer -> T) -> 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)
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
class SignatureSpec: QuickSpec {
|
||||||
override func spec() {
|
override func spec() {
|
||||||
describe("init(pointer:)") {
|
describe("init(signature:)") {
|
||||||
it("should set its properties") {
|
it("should initialize its properties") {
|
||||||
let repo = Fixtures.simpleRepository
|
let repo = Fixtures.simpleRepository
|
||||||
let oid = OID(string: "dc220a3f0c22920dab86d4a8d3a3cb7e69d6205a")!
|
let oid = OID(string: "dc220a3f0c22920dab86d4a8d3a3cb7e69d6205a")!
|
||||||
|
|
||||||
let commit = repo.commitWithOID(oid).value()
|
let raw_signature = from_git_object(repo, oid) { git_commit_author($0).memory }
|
||||||
expect(commit?.oid).to(equal(oid))
|
let signature = Signature(signature: raw_signature)
|
||||||
expect(commit?.message).to(equal("Create a README\n"))
|
|
||||||
|
expect(signature.name).to(equal("Matt Diephouse"))
|
||||||
|
expect(signature.email).to(equal("matt@diephouse.com"))
|
||||||
|
expect(signature.time).to(equal(NSDate(timeIntervalSince1970: 1416186947)))
|
||||||
|
expect(signature.timeZone.abbreviation).to(equal("GMT-5"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CommitSpec: QuickSpec {
|
||||||
|
override func spec() {
|
||||||
|
describe("init(pointer:)") {
|
||||||
|
it("should initialize its properties") {
|
||||||
|
let repo = Fixtures.simpleRepository
|
||||||
|
let oid = OID(string: "dc220a3f0c22920dab86d4a8d3a3cb7e69d6205a")!
|
||||||
|
|
||||||
|
let commit = from_git_object(repo, oid) { Commit(pointer: $0) }
|
||||||
|
expect(commit.oid).to(equal(oid))
|
||||||
|
expect(commit.message).to(equal("Create a README\n"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user