Skip to content

Commit

Permalink
Merge pull request #16728 from JuliaLang/ksh/gitreftests
Browse files Browse the repository at this point in the history
Add some tests for libgit2 and a function to list all the reference names
  • Loading branch information
tkelman committed Jun 8, 2016
2 parents 3b3d4d8 + 78cf30b commit 615f7ca
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 3 deletions.
16 changes: 16 additions & 0 deletions base/libgit2/reference.jl
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,13 @@ function isbranch(ref::GitReference)
return err == 1
end

function istag(ref::GitReference)
isempty(ref) && return false
err = ccall((:git_reference_is_tag, :libgit2), Cint,
(Ptr{Void},), ref.ptr)
return err == 1
end

function isremote(ref::GitReference)
isempty(ref) && return false
err = ccall((:git_reference_is_remote, :libgit2), Cint,
Expand All @@ -96,6 +103,15 @@ function peel{T <: GitObject}(::Type{T}, ref::GitReference)
return T(obj_ptr_ptr[])
end

function ref_list(repo::GitRepo)
with(StrArrayStruct()) do sa
sa_ref = Ref(sa)
@check ccall((:git_reference_list, :libgit2), Cint,
(Ptr{StrArrayStruct}, Ptr{Void}), sa_ref, repo.ptr)
convert(Vector{AbstractString}, sa_ref[])
end
end

function create_branch(repo::GitRepo,
bname::AbstractString,
commit_obj::GitCommit;
Expand Down
9 changes: 6 additions & 3 deletions base/libgit2/tag.jl
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,13 @@ function tag_create(repo::GitRepo, tag::AbstractString, commit::Union{AbstractSt
end

function name(tag::GitTag)
return String(ccall((:git_tag_name, :libgit2), Cstring, (Ptr{Void}, ), tag.ptr))
str_ptr = ccall((:git_tag_name, :libgit2), Cstring, (Ptr{Void}, ), tag.ptr)
str_ptr == C_NULL && throw(Error.GitError(Error.ERROR))
return String(str_ptr)
end

function target(tag::GitTag)
oid_ptr = Ref(ccall((:git_tag_target_id, :libgit2), Ptr{Oid}, (Ptr{Void}, ), tag.ptr))
return oid_ptr[]
oid_ptr = ccall((:git_tag_target_id, :libgit2), Ptr{Oid}, (Ptr{Void}, ), tag.ptr)
oid_ptr == C_NULL && throw(Error.GitError(Error.ERROR))
return Oid(oid_ptr)
end
15 changes: 15 additions & 0 deletions test/libgit2.jl
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,13 @@ mktempdir() do dir
@test LibGit2.iszero(commit_oid2)
commit_oid2 = LibGit2.commit(repo, commit_msg2; author=test_sig, committer=test_sig)
@test !LibGit2.iszero(commit_oid2)
auths = LibGit2.authors(repo)
@test length(auths) == 3
for auth in auths
@test auth.name == test_sig.name
@test auth.time == test_sig.time
@test auth.email == test_sig.email
end

# lookup commits
cmt = LibGit2.get(LibGit2.GitCommit, repo, commit_oid1)
Expand Down Expand Up @@ -315,13 +322,21 @@ mktempdir() do dir
tags = LibGit2.tag_list(repo)
@test length(tags) == 1
@test tag1 in tags
tag1ref = LibGit2.GitReference(repo, "refs/tags/$tag1")
@test isempty(LibGit2.fullname(tag1ref)) #because this is a reference to an OID
tag1tag = LibGit2.peel(LibGit2.GitTag,tag1ref)
@test LibGit2.name(tag1tag) == tag1
@test LibGit2.target(tag1tag) == commit_oid1

tag_oid2 = LibGit2.tag_create(repo, tag2, commit_oid2)
@test !LibGit2.iszero(tag_oid2)
tags = LibGit2.tag_list(repo)
@test length(tags) == 2
@test tag2 in tags

refs = LibGit2.ref_list(repo)
@test refs == ["refs/heads/master","refs/heads/test_branch","refs/tags/tag1","refs/tags/tag2"]

LibGit2.tag_delete(repo, tag1)
tags = LibGit2.tag_list(repo)
@test length(tags) == 1
Expand Down

0 comments on commit 615f7ca

Please sign in to comment.