From 2d0c0765fcbec609f4fa04d5bea6e8699ad30e62 Mon Sep 17 00:00:00 2001 From: Matt Diephouse Date: Sat, 21 Feb 2015 21:40:12 -0500 Subject: [PATCH] Add Repository.HEAD() --- SwiftGit2.xcodeproj/project.pbxproj | 4 ++++ SwiftGit2/References.swift | 11 +++++++++++ SwiftGit2/Repository.swift | 23 ++++++++++++++-------- SwiftGit2Tests/Fixtures/Fixtures.swift | 4 ++++ SwiftGit2Tests/Fixtures/detached-head.zip | Bin 0 -> 23351 bytes SwiftGit2Tests/RepositorySpec.swift | 17 ++++++++++++++++ 6 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 SwiftGit2Tests/Fixtures/detached-head.zip diff --git a/SwiftGit2.xcodeproj/project.pbxproj b/SwiftGit2.xcodeproj/project.pbxproj index c5f52d1..afabe69 100644 --- a/SwiftGit2.xcodeproj/project.pbxproj +++ b/SwiftGit2.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ BE0991F71A578FB1007D4E6A /* Mantle.zip in Resources */ = {isa = PBXBuildFile; fileRef = BE0991F61A578FB1007D4E6A /* Mantle.zip */; }; + BE0B1C5D1A9978890004726D /* detached-head.zip in Resources */ = {isa = PBXBuildFile; fileRef = BE0B1C5C1A9978890004726D /* detached-head.zip */; }; BE14AA321A15AA510015B439 /* LlamaKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE14AA311A15AA510015B439 /* LlamaKit.framework */; }; BE14AA501A1974010015B439 /* SwiftGit2.m in Sources */ = {isa = PBXBuildFile; fileRef = BE14AA4F1A1974010015B439 /* SwiftGit2.m */; }; BE14AA551A1984550015B439 /* Fixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE14AA541A1984550015B439 /* Fixtures.swift */; }; @@ -71,6 +72,7 @@ /* Begin PBXFileReference section */ BE0991F61A578FB1007D4E6A /* Mantle.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = Mantle.zip; sourceTree = ""; }; + BE0B1C5C1A9978890004726D /* detached-head.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "detached-head.zip"; sourceTree = ""; }; BE14AA311A15AA510015B439 /* LlamaKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LlamaKit.framework; path = External/LlamaKit/build/Debug/LlamaKit.framework; sourceTree = ""; }; BE14AA4F1A1974010015B439 /* SwiftGit2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SwiftGit2.m; sourceTree = ""; }; BE14AA541A1984550015B439 /* Fixtures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Fixtures.swift; sourceTree = ""; }; @@ -151,6 +153,7 @@ BE14AA531A1983520015B439 /* Fixtures */ = { isa = PBXGroup; children = ( + BE0B1C5C1A9978890004726D /* detached-head.zip */, BE14AA541A1984550015B439 /* Fixtures.swift */, BE0991F61A578FB1007D4E6A /* Mantle.zip */, BE14AA561A198C6E0015B439 /* simple-repository.zip */, @@ -439,6 +442,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + BE0B1C5D1A9978890004726D /* detached-head.zip in Resources */, BE0991F71A578FB1007D4E6A /* Mantle.zip in Resources */, BE14AA571A198C6E0015B439 /* simple-repository.zip in Resources */, ); diff --git a/SwiftGit2/References.swift b/SwiftGit2/References.swift index 47b9404..fa3e724 100644 --- a/SwiftGit2/References.swift +++ b/SwiftGit2/References.swift @@ -23,6 +23,17 @@ public func ==(lhs: T, rhs: T) -> Bool { && lhs.oid == rhs.oid } +/// Create a Reference, Branch, or TagReference from a libgit2 `git_reference`. +internal func referenceWithLibGit2Reference(pointer: COpaquePointer) -> ReferenceType { + if git_reference_is_branch(pointer) != 0 || git_reference_is_remote(pointer) != 0 { + return Branch(pointer)! + } else if git_reference_is_tag(pointer) != 0 { + return TagReference(pointer)! + } else { + return Reference(pointer) + } +} + /// A generic reference to a git object. public struct Reference: ReferenceType { /// The full name of the reference (e.g., `refs/heads/master`). diff --git a/SwiftGit2/Repository.swift b/SwiftGit2/Repository.swift index ce61f05..7981cb2 100644 --- a/SwiftGit2/Repository.swift +++ b/SwiftGit2/Repository.swift @@ -291,14 +291,7 @@ final public class Repository { return failure(libGit2Error(result, libGit2PointOfFailure: "git_reference_lookup")) } - var value: ReferenceType - if git_reference_is_branch(pointer.memory) != 0 || git_reference_is_remote(pointer.memory) != 0 { - value = Branch(pointer.memory)! - } else if git_reference_is_tag(pointer.memory) != 0 { - value = TagReference(pointer.memory)! - } else { - value = Reference(pointer.memory) - } + let value = referenceWithLibGit2Reference(pointer.memory) git_reference_free(pointer.memory) pointer.dealloc(1) @@ -343,4 +336,18 @@ final public class Repository { public func tagWithName(name: String) -> Result { return referenceWithName("refs/tags/" + name).map { $0 as! TagReference } } + + // MARK: - Working Directory + + /// Load the reference pointed at by HEAD. + /// + /// When on a branch, this will return the current `Branch`. + public func HEAD() -> Result { + var pointer = COpaquePointer.null() + let result = git_repository_head(&pointer, self.pointer) + if result != GIT_OK.value { + return failure(libGit2Error(result, libGit2PointOfFailure: "git_repository_head")) + } + return success(referenceWithLibGit2Reference(pointer)) + } } diff --git a/SwiftGit2Tests/Fixtures/Fixtures.swift b/SwiftGit2Tests/Fixtures/Fixtures.swift index cf31e88..574efc6 100644 --- a/SwiftGit2Tests/Fixtures/Fixtures.swift +++ b/SwiftGit2Tests/Fixtures/Fixtures.swift @@ -64,6 +64,10 @@ final class Fixtures { // MARK: - The Fixtures + class var detachedHeadRepository: Repository { + return Fixtures.sharedInstance.repositoryWithName("detached-head") + } + class var simpleRepository: Repository { return Fixtures.sharedInstance.repositoryWithName("simple-repository") } diff --git a/SwiftGit2Tests/Fixtures/detached-head.zip b/SwiftGit2Tests/Fixtures/detached-head.zip new file mode 100644 index 0000000000000000000000000000000000000000..c819ab8f50c08578649360dc783492eba87da101 GIT binary patch literal 23351 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�iAgPZOTQoz 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 SP(c4Jc#MEx0sY4a2>w5@bV>05 literal 0 HcmV?d00001 diff --git a/SwiftGit2Tests/RepositorySpec.swift b/SwiftGit2Tests/RepositorySpec.swift index 6c5d7d4..3c69267 100644 --- a/SwiftGit2Tests/RepositorySpec.swift +++ b/SwiftGit2Tests/RepositorySpec.swift @@ -412,5 +412,22 @@ class RepositorySpec: QuickSpec { expect(result).to(haveFailed(beAnError(domain: equal(libGit2ErrorDomain)))) } } + + describe("-HEAD()") { + it("should work when on a branch") { + let result = Fixtures.simpleRepository.HEAD() + expect(result.value?.longName).to(equal("refs/heads/master")) + expect(result.value?.shortName).to(equal("master")) + expect(result.value? as? Branch).notTo(beNil()) + } + + it("should work when on a detached HEAD") { + let result = Fixtures.detachedHeadRepository.HEAD() + expect(result.value?.longName).to(equal("HEAD")) + expect(result.value?.shortName).to(beNil()) + expect(result.value?.oid).to(equal(OID(string: "315b3f344221db91ddc54b269f3c9af422da0f2e")!)) + expect(result.value? as? Reference).notTo(beNil()) + } + } } }