-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
self._tmpname = None
f = None
try:
- f = open(filename, 'r')
+ f = open(filename, 'rb')
except IOError as e:
if e.errno == errno.ENOENT:
pass
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
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:
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]