mollusk 0e4acfb8f2 fix incorrect folder name for julia-0.6.x
Former-commit-id: ef2c7401e0876f22d2f7762d182cfbcd5a7d9c70
2018-06-11 03:28:36 -07:00

104 lines
3.2 KiB
Julia

# 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