X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=lib%2Fbup%2Fhlinkdb.py;h=f953a32d321e2b9d3d634a09554c3ef1efa2eb9f;hb=20442f9afdcd3fc36d69bac3d8b7513920501ee0;hp=70f3213f8b061805533fda066b196ce2f14b2b32;hpb=febb15487a47669374810622481ead399728d861;p=bup.git diff --git a/lib/bup/hlinkdb.py b/lib/bup/hlinkdb.py index 70f3213..f953a32 100644 --- a/lib/bup/hlinkdb.py +++ b/lib/bup/hlinkdb.py @@ -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]