-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
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
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)
os.close(ffd)
raise
try:
- cPickle.dump(self._node_paths, f, 2)
+ pickle.dump(self._node_paths, f, 2)
finally:
f.close()
f = None
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: