Add: julia-0.6.2
Former-commit-id: ccc667cf67d569f3fb3df39aa57c2134755a7551
This commit is contained in:
103
julia-0.6.2/share/julia/base/libgit2/error.jl
Normal file
103
julia-0.6.2/share/julia/base/libgit2/error.jl
Normal file
@@ -0,0 +1,103 @@
|
||||
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
||||
|
||||
module Error
|
||||
|
||||
export GitError
|
||||
|
||||
@enum(Code, GIT_OK = Cint(0), # no error
|
||||
ERROR = Cint(-01), # generic error
|
||||
ENOTFOUND = Cint(-03), # requested object could not be found
|
||||
EEXISTS = Cint(-04), # object exits preventing op
|
||||
EAMBIGUOUS = Cint(-05), # more than one object matches
|
||||
EBUFS = Cint(-06), # output buffer too small to hold data
|
||||
EUSER = Cint(-07), # user callback generated error
|
||||
EBAREREPO = Cint(-08), # operation not allowed on bare repo
|
||||
EUNBORNBRANCH = Cint(-09), # HEAD refers to branch with 0 commits
|
||||
EUNMERGED = Cint(-10), # merge in progress prevented op
|
||||
ENONFASTFORWARD = Cint(-11), # ref not fast-forwardable
|
||||
EINVALIDSPEC = Cint(-12), # name / ref not in valid format
|
||||
EMERGECONFLICT = Cint(-13), # merge conflict prevented op
|
||||
ELOCKED = Cint(-14), # lock file prevented op
|
||||
EMODIFIED = Cint(-15), # ref value does not match expected
|
||||
EAUTH = Cint(-16), # authentication error
|
||||
ECERTIFICATE = Cint(-17), # server certificate is invalid
|
||||
EAPPLIED = Cint(-18), # patch/merge has already been applied
|
||||
EPEEL = Cint(-19), # the requested peel operation is not possible
|
||||
EEOF = Cint(-20), # Unexpted EOF
|
||||
PASSTHROUGH = Cint(-30), # internal only
|
||||
ITEROVER = Cint(-31)) # signals end of iteration
|
||||
|
||||
@enum(Class, None,
|
||||
NoMemory,
|
||||
OS,
|
||||
Invalid,
|
||||
Reference,
|
||||
Zlib,
|
||||
Repository,
|
||||
Config,
|
||||
Regex,
|
||||
Odb,
|
||||
Index,
|
||||
Object,
|
||||
Net,
|
||||
Tag,
|
||||
Tree,
|
||||
Indexer,
|
||||
SSL,
|
||||
Submodule,
|
||||
Thread,
|
||||
Stash,
|
||||
Checkout,
|
||||
FetchHead,
|
||||
Merge,
|
||||
SSH,
|
||||
Filter,
|
||||
Revert,
|
||||
Callback,
|
||||
CherryPick,
|
||||
Describe,
|
||||
Rebase)
|
||||
|
||||
struct ErrorStruct
|
||||
message::Ptr{UInt8}
|
||||
class::Cint
|
||||
end
|
||||
|
||||
struct GitError <: Exception
|
||||
class::Class
|
||||
code::Code
|
||||
msg::AbstractString
|
||||
end
|
||||
Base.show(io::IO, err::GitError) = print(io, "GitError(Code:$(err.code), Class:$(err.class), $(err.msg))")
|
||||
|
||||
function last_error()
|
||||
err = ccall((:giterr_last, :libgit2), Ptr{ErrorStruct}, ())
|
||||
if err != C_NULL
|
||||
err_obj = unsafe_load(err)
|
||||
err_class = Class[err_obj.class][]
|
||||
err_msg = unsafe_string(err_obj.message)
|
||||
else
|
||||
err_class = Class[0][]
|
||||
err_msg = "No errors"
|
||||
end
|
||||
return (err_class, err_msg)
|
||||
end
|
||||
|
||||
function GitError(code::Integer)
|
||||
err_code = Code[code][]
|
||||
err_class, err_msg = last_error()
|
||||
return GitError(err_class, err_code, err_msg)
|
||||
end
|
||||
|
||||
end # Error module
|
||||
|
||||
macro check(git_func)
|
||||
quote
|
||||
local err::Cint
|
||||
err = $(esc(git_func::Expr))
|
||||
if err < 0
|
||||
throw(Error.GitError(err))
|
||||
end
|
||||
err
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user