]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/hlinkdb.py
hlinkdb: always load as bytes on python3
[bup.git] / lib / bup / hlinkdb.py
index 70f3213f8b061805533fda066b196ce2f14b2b32..f953a32d321e2b9d3d634a09554c3ef1efa2eb9f 100644 (file)
@@ -1,4 +1,17 @@
-import cPickle, errno, os, tempfile
+
+from __future__ import absolute_import
+import errno, os, tempfile
+
+from bup import compat
+
+if compat.py_maj > 2:
+    import pickle
+    def pickle_load(f):
+        return pickle.load(f, encoding='bytes')
+else:
+    import cPickle as pickle
+    pickle_load = pickle.load
+
 
 class Error(Exception):
     pass
@@ -14,7 +27,7 @@ class HLinkDB:
         self._tmpname = None
         f = None
         try:
-            f = open(filename, 'r')
+            f = open(filename, 'rb')
         except IOError as e:
             if e.errno == errno.ENOENT:
                 pass
@@ -22,12 +35,12 @@ class HLinkDB:
                 raise
         if f:
             try:
-                self._node_paths = cPickle.load(f)
+                self._node_paths = pickle_load(f)
             finally:
                 f.close()
                 f = None
         # Set up the reverse hard link index.
-        for node, paths in self._node_paths.iteritems():
+        for node, paths in compat.items(self._node_paths):
             for path in paths:
                 self._path_node[path] = node
 
@@ -38,7 +51,7 @@ class HLinkDB:
             raise Error('save of %r already in progress' % self._filename)
         if self._node_paths:
             (dir, name) = os.path.split(self._filename)
-            (ffd, self._tmpname) = tempfile.mkstemp('.tmp', name, dir)
+            (ffd, self._tmpname) = tempfile.mkstemp(b'.tmp', name, dir)
             try:
                 try:
                     f = os.fdopen(ffd, 'wb', 65536)
@@ -46,7 +59,7 @@ class HLinkDB:
                     os.close(ffd)
                     raise
                 try:
-                    cPickle.dump(self._node_paths, f, 2)
+                    pickle.dump(self._node_paths, f, 2)
                 finally:
                     f.close()
                     f = None
@@ -84,7 +97,7 @@ class HLinkDB:
 
     def add_path(self, path, dev, ino):
         # Assume path is new.
-        node = '%s:%s' % (dev, ino)
+        node = b'%d:%d' % (dev, ino)
         self._path_node[path] = node
         link_paths = self._node_paths.get(node)
         if link_paths and path not in link_paths:
@@ -112,5 +125,5 @@ class HLinkDB:
             del self._path_node[path]
 
     def node_paths(self, dev, ino):
-        node = '%s:%s' % (dev, ino)
+        node = b'%d:%d' % (dev, ino)
         return self._node_paths[node]