diff --git a/pygit2/errors.py b/pygit2/errors.py index 6187bd5..e0a6767 100644 --- a/pygit2/errors.py +++ b/pygit2/errors.py @@ -25,32 +25,40 @@ # the Free Software Foundation, 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. -# ffi +# Import from pygit2 from .ffi import ffi, C - from _pygit2 import GitError +value_errors = set([C.GIT_EEXISTS, C.GIT_EINVALIDSPEC, C.GIT_EEXISTS, + C.GIT_EAMBIGUOUS]) + def check_error(err, io=False): if err >= 0: return - message = "(no message provided)" + # Error message giterr = C.giterr_last() if giterr != ffi.NULL: message = ffi.string(giterr.message).decode() + else: + message = "err %d (no message provided)" % err - if err in [C.GIT_EEXISTS, C.GIT_EINVALIDSPEC, C.GIT_EEXISTS, - C.GIT_EAMBIGUOUS]: + # Translate to Python errors + if err in value_errors: raise ValueError(message) - elif err == C.GIT_ENOTFOUND: + + if err == C.GIT_ENOTFOUND: if io: raise IOError(message) - else: - raise KeyError(message) - elif err == C.GIT_EINVALIDSPEC: + + raise KeyError(message) + + if err == C.GIT_EINVALIDSPEC: raise ValueError(message) - elif err == C.GIT_ITEROVER: + + if err == C.GIT_ITEROVER: raise StopIteration() + # Generic Git error raise GitError(message)