]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/compat.py
Fix tindex for python 3
[bup.git] / lib / bup / compat.py
index b795b652f916c46022a0e1a034b2d7be4cd2af0f..7b20ebccfe5afaa7e0ea968f7e771b3c81aac7e7 100644 (file)
@@ -12,6 +12,19 @@ py3 = py_maj >= 3
 
 if py3:
 
+    from os import environb as environ
+
+    lc_ctype = environ.get(b'LC_CTYPE')
+    if lc_ctype and lc_ctype.lower() != b'iso-8859-1':
+        # Because of argv, options.py, pwd, grp, and any number of other issues
+        print('error: bup currently only works with ISO-8859-1, not LC_CTYPE=%s'
+              % lc_ctype.decode(),
+              file=sys.stderr)
+        print('error: this should already have been arranged, so indicates a bug',
+              file=sys.stderr)
+        sys.exit(2)
+
+    from os import fsencode
     from shlex import quote
     range = range
     str_type = str
@@ -27,6 +40,10 @@ if py3:
     def items(x):
         return x.items()
 
+    def argv_bytes(x):
+        """Return the original bytes passed to main() for an argv argument."""
+        return fsencode(x)
+
     def bytes_from_uint(i):
         return bytes((i,))
 
@@ -42,11 +59,15 @@ if py3:
 
     def join_bytes(*items):
         """Return the concatenated bytes or memoryview arguments as bytes."""
-        return b''.join(*items)
+        return b''.join(items)
 
 else:  # Python 2
 
+    def fsencode(x):
+        return x
+
     from pipes import quote
+    from os import environ
     range = xrange
     str_type = basestring
 
@@ -87,6 +108,10 @@ else:  # Python 2
     def items(x):
         return x.iteritems()
 
+    def argv_bytes(x):
+        """Return the original bytes passed to main() for an argv argument."""
+        return x
+
     def bytes_from_uint(i):
         return chr(i)