Add: julia-0.6.2
Former-commit-id: ccc667cf67d569f3fb3df39aa57c2134755a7551
This commit is contained in:
124
julia-0.6.2/share/julia/base/libgit2/index.jl
Normal file
124
julia-0.6.2/share/julia/base/libgit2/index.jl
Normal file
@@ -0,0 +1,124 @@
|
||||
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
||||
|
||||
function GitIndex(repo::GitRepo)
|
||||
idx_ptr_ptr = Ref{Ptr{Void}}(C_NULL)
|
||||
@check ccall((:git_repository_index, :libgit2), Cint,
|
||||
(Ptr{Ptr{Void}}, Ptr{Void}), idx_ptr_ptr, repo.ptr)
|
||||
return GitIndex(repo, idx_ptr_ptr[])
|
||||
end
|
||||
|
||||
function read!(idx::GitIndex, force::Bool = false)
|
||||
@check ccall((:git_index_read, :libgit2), Cint, (Ptr{Void}, Cint), idx.ptr, Cint(force))
|
||||
return idx
|
||||
end
|
||||
|
||||
function write!(idx::GitIndex)
|
||||
@check ccall((:git_index_write, :libgit2), Cint, (Ptr{Void},), idx.ptr)
|
||||
return idx
|
||||
end
|
||||
|
||||
function write_tree!(idx::GitIndex)
|
||||
oid_ptr = Ref(GitHash())
|
||||
@check ccall((:git_index_write_tree, :libgit2), Cint,
|
||||
(Ptr{GitHash}, Ptr{Void}), oid_ptr, idx.ptr)
|
||||
return oid_ptr[]
|
||||
end
|
||||
|
||||
function repository(idx::GitIndex)
|
||||
if isnull(idx.owner)
|
||||
throw(GitError(Error.Index, Error.ENOTFOUND, "Index does not have an owning repository."))
|
||||
else
|
||||
return Base.get(idx.owner)
|
||||
end
|
||||
end
|
||||
|
||||
"""
|
||||
LibGit2.read_tree!(idx::GitIndex, tree::GitTree)
|
||||
LibGit2.read_tree!(idx::GitIndex, treehash::AbstractGitHash)
|
||||
|
||||
Read the tree `tree` (or the tree pointed to by `treehash` in the repository owned by
|
||||
`idx`) into the index `idx`. The current index contents will be replaced.
|
||||
"""
|
||||
function read_tree!(idx::GitIndex, tree::GitTree)
|
||||
@check ccall((:git_index_read_tree, :libgit2), Cint,
|
||||
(Ptr{Void}, Ptr{Void}), idx.ptr, tree.ptr)
|
||||
end
|
||||
read_tree!(idx::GitIndex, hash::AbstractGitHash) =
|
||||
read_tree!(idx, GitTree(repository(idx), hash))
|
||||
|
||||
function add!(idx::GitIndex, files::AbstractString...;
|
||||
flags::Cuint = Consts.INDEX_ADD_DEFAULT)
|
||||
@check ccall((:git_index_add_all, :libgit2), Cint,
|
||||
(Ptr{Void}, Ptr{StrArrayStruct}, Cuint, Ptr{Void}, Ptr{Void}),
|
||||
idx.ptr, collect(files), flags, C_NULL, C_NULL)
|
||||
end
|
||||
|
||||
function update!(idx::GitIndex, files::AbstractString...)
|
||||
@check ccall((:git_index_update_all, :libgit2), Cint,
|
||||
(Ptr{Void}, Ptr{StrArrayStruct}, Ptr{Void}, Ptr{Void}),
|
||||
idx.ptr, collect(files), C_NULL, C_NULL)
|
||||
end
|
||||
|
||||
function remove!(idx::GitIndex, files::AbstractString...)
|
||||
@check ccall((:git_index_remove_all, :libgit2), Cint,
|
||||
(Ptr{Void}, Ptr{StrArrayStruct}, Ptr{Void}, Ptr{Void}),
|
||||
idx.ptr, collect(files), C_NULL, C_NULL)
|
||||
end
|
||||
|
||||
function add!(repo::GitRepo, files::AbstractString...;
|
||||
flags::Cuint = Consts.INDEX_ADD_DEFAULT)
|
||||
with(GitIndex, repo) do idx
|
||||
add!(idx, files..., flags = flags)
|
||||
write!(idx)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
function update!(repo::GitRepo, files::AbstractString...)
|
||||
with(GitIndex, repo) do idx
|
||||
update!(idx, files...)
|
||||
write!(idx)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
function remove!(repo::GitRepo, files::AbstractString...)
|
||||
with(GitIndex, repo) do idx
|
||||
remove!(idx, files...)
|
||||
write!(idx)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
function read!(repo::GitRepo, force::Bool = false)
|
||||
with(GitIndex, repo) do idx
|
||||
read!(idx, force)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
function Base.count(idx::GitIndex)
|
||||
return ccall((:git_index_entrycount, :libgit2), Csize_t, (Ptr{Void},), idx.ptr)
|
||||
end
|
||||
|
||||
function Base.getindex(idx::GitIndex, i::Integer)
|
||||
ie_ptr = ccall((:git_index_get_byindex, :libgit2),
|
||||
Ptr{IndexEntry},
|
||||
(Ptr{Void}, Csize_t), idx.ptr, i-1)
|
||||
ie_ptr == C_NULL && return nothing
|
||||
return unsafe_load(ie_ptr)
|
||||
end
|
||||
|
||||
function Base.find(path::String, idx::GitIndex)
|
||||
pos_ref = Ref{Csize_t}(0)
|
||||
ret = ccall((:git_index_find, :libgit2), Cint,
|
||||
(Ref{Csize_t}, Ptr{Void}, Cstring), pos_ref, idx.ptr, path)
|
||||
ret == Cint(Error.ENOTFOUND) && return Nullable{Csize_t}()
|
||||
return Nullable(pos_ref[]+1)
|
||||
end
|
||||
|
||||
stage(ie::IndexEntry) = ccall((:git_index_entry_stage, :libgit2), Cint, (Ptr{IndexEntry},), Ref(ie))
|
||||
|
||||
function Base.show(io::IO, idx::GitIndex)
|
||||
println(io, "GitIndex:\nRepository: ", repository(idx), "\nNumber of elements: ", count(idx))
|
||||
end
|
||||
Reference in New Issue
Block a user