Fix repository crash if path passed is not a str

Tries to decode any non-string objects (such as bytes)

Introduces `six` as a dependency

Closes #588
This commit is contained in:
Thom Wiggers
2016-02-28 12:32:51 +01:00
parent bc424e342f
commit 735510f14d
2 changed files with 9 additions and 4 deletions

View File

@@ -37,6 +37,8 @@ if sys.version_info[0] < 3:
else:
from io import BytesIO as StringIO
import six
# Import from pygit2
from _pygit2 import Repository as _Repository
from _pygit2 import Oid, GIT_OID_HEXSZ, GIT_OID_MINPREFIXLEN
@@ -56,8 +58,10 @@ from .submodule import Submodule
class Repository(_Repository):
def __init__(self, *args, **kwargs):
super(Repository, self).__init__(*args, **kwargs)
def __init__(self, path, *args, **kwargs):
if not isinstance(path, six.string_types):
path = path.decode('utf-8')
super(Repository, self).__init__(path, *args, **kwargs)
self._common_init()
@classmethod

View File

@@ -63,6 +63,7 @@ del sys.path[0]
# Python 2 support
# See https://github.com/libgit2/pygit2/pull/180 for a discussion about this.
# Using six isn't an option here yet, we don't necessarily have six installed
if sys.version_info[0] == 2:
u = lambda s: unicode(s, 'utf-8')
else:
@@ -186,7 +187,7 @@ extra_args = {
if cffi_major_version == 0:
extra_args['ext_modules'].append(ffi.verifier.get_extension())
else:
extra_args['cffi_modules']=['pygit2/_run.py:ffi']
extra_args['cffi_modules'] = ['pygit2/_run.py:ffi']
setup(name='pygit2',
@@ -202,7 +203,7 @@ setup(name='pygit2',
packages=['pygit2'],
package_data={'pygit2': ['decl.h']},
setup_requires=['cffi'],
install_requires=['cffi'],
install_requires=['cffi', 'six'],
zip_safe=False,
cmdclass=cmdclass,
**extra_args)