]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/hlinkdb.py
bup-save bup.drecurse bup.hlinkdb bup.path: accommodate python 3
[bup.git] / lib / bup / hlinkdb.py
index 5edb0a627961bd9ca50da249ec214fc791d562fd..d4125aef44837084983e712ad67f483a88943f9a 100644 (file)
@@ -1,4 +1,14 @@
-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
+else:
+    import cPickle as pickle
+
 
 class Error(Exception):
     pass
@@ -14,20 +24,20 @@ class HLinkDB:
         self._tmpname = None
         f = None
         try:
-            f = open(filename, 'r')
-        except IOError, e:
+            f = open(filename, 'rb')
+        except IOError as e:
             if e.errno == errno.ENOENT:
                 pass
             else:
                 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 +48,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 +56,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
@@ -67,7 +77,7 @@ class HLinkDB:
         else: # No data -- delete _filename if it exists.
             try:
                 os.unlink(self._filename)
-            except OSError, e:
+            except OSError as e:
                 if e.errno == errno.ENOENT:
                     pass
                 else: