Show at least git error code when no git error message is available

Should help resolving issue #494
This commit is contained in:
J. David Ibáñez 2015-02-20 11:35:10 +01:00
parent fbb11775a3
commit adb351f7b3

@ -25,32 +25,40 @@
# the Free Software Foundation, 51 Franklin Street, Fifth Floor, # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA. # Boston, MA 02110-1301, USA.
# ffi # Import from pygit2
from .ffi import ffi, C from .ffi import ffi, C
from _pygit2 import GitError 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): def check_error(err, io=False):
if err >= 0: if err >= 0:
return return
message = "(no message provided)" # Error message
giterr = C.giterr_last() giterr = C.giterr_last()
if giterr != ffi.NULL: if giterr != ffi.NULL:
message = ffi.string(giterr.message).decode() 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, # Translate to Python errors
C.GIT_EAMBIGUOUS]: if err in value_errors:
raise ValueError(message) raise ValueError(message)
elif err == C.GIT_ENOTFOUND:
if err == C.GIT_ENOTFOUND:
if io: if io:
raise IOError(message) raise IOError(message)
else:
raise KeyError(message) raise KeyError(message)
elif err == C.GIT_EINVALIDSPEC:
if err == C.GIT_EINVALIDSPEC:
raise ValueError(message) raise ValueError(message)
elif err == C.GIT_ITEROVER:
if err == C.GIT_ITEROVER:
raise StopIteration() raise StopIteration()
# Generic Git error
raise GitError(message) raise GitError(message)