summaryrefslogtreecommitdiff
path: root/git/compat.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2015-01-05 15:53:46 +0100
committerSebastian Thiel <byronimo@gmail.com>2015-01-05 15:53:46 +0100
commit04357d0d46fee938a618b64daed1716606e05ca5 (patch)
treeab7f0a4ecc047f4710b7e5cf7182cc3e22e477fc /git/compat.py
parentbc8c91200a7fb2140aadd283c66b5ab82f9ad61e (diff)
downloadgitpython-04357d0d46fee938a618b64daed1716606e05ca5.tar.gz
Intermediate commit: test_config and test_actor works
Kind of tackling the tasks step by step, picking low-hanging fruit first, or the ones that everyone depends on
Diffstat (limited to 'git/compat.py')
-rw-r--r--git/compat.py32
1 files changed, 31 insertions, 1 deletions
diff --git a/git/compat.py b/git/compat.py
index a95c5667..4a892ad2 100644
--- a/git/compat.py
+++ b/git/compat.py
@@ -7,6 +7,8 @@
"""utilities to help provide compatibility with python 3"""
# flake8: noqa
+import sys
+
from gitdb.utils.compat import (
PY3,
xrange,
@@ -17,11 +19,39 @@ from gitdb.utils.compat import (
from gitdb.utils.encoding import (
string_types,
text_type,
- force_bytes
+ force_bytes,
+ force_text
)
+defenc = sys.getdefaultencoding()
if PY3:
import io
FileType = io.IOBase
else:
FileType = file
+ # usually, this is just ascii, which might not enough for our encoding needs
+ # Unless it's set specifically, we override it to be utf-8
+ if defenc == 'ascii':
+ defenc = 'utf-8'
+
+
+def with_metaclass(meta, *bases):
+ """copied from https://github.com/Byron/bcore/blob/master/src/python/butility/future.py#L15"""
+ class metaclass(meta):
+ __call__ = type.__call__
+ __init__ = type.__init__
+
+ def __new__(cls, name, nbases, d):
+ if nbases is None:
+ return type.__new__(cls, name, (), d)
+ # There may be clients who rely on this attribute to be set to a reasonable value, which is why
+ # we set the __metaclass__ attribute explicitly
+ if not PY3 and '___metaclass__' not in d:
+ d['__metaclass__'] = meta
+ # end
+ return meta(name, bases, d)
+ # end
+ # end metaclass
+ return metaclass(meta.__name__ + 'Helper', None, {})
+ # end handle py2
+