diff options
author | ben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109> | 2002-05-10 23:14:35 +0000 |
---|---|---|
committer | ben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109> | 2002-05-10 23:14:35 +0000 |
commit | 807241bc4f322edc6f95782291900362484263df (patch) | |
tree | 95dc93d87081ab901e31844867d4facca6207aac /rdiff-backup/rdiff_backup/connection.py | |
parent | 5c059e737511644b0056b8326b52763c82efcac4 (diff) | |
download | rdiff-backup-807241bc4f322edc6f95782291900362484263df.tar.gz |
Lots of changes, see changelog for 0.7.4.
git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@72 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109
Diffstat (limited to 'rdiff-backup/rdiff_backup/connection.py')
-rw-r--r-- | rdiff-backup/rdiff_backup/connection.py | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/rdiff-backup/rdiff_backup/connection.py b/rdiff-backup/rdiff_backup/connection.py index 9842480..57d2fa5 100644 --- a/rdiff-backup/rdiff_backup/connection.py +++ b/rdiff-backup/rdiff_backup/connection.py @@ -92,6 +92,7 @@ class LowLevelPipeConnection(Connection): b - string q - quit signal t - TempFile + d - DSRPath R - RPath r - RORPath only c - PipeConnection object @@ -118,6 +119,7 @@ class LowLevelPipeConnection(Connection): if type(obj) is types.StringType: self._putbuf(obj, req_num) elif isinstance(obj, Connection): self._putconn(obj, req_num) elif isinstance(obj, TempFile): self._puttempfile(obj, req_num) + elif isinstance(obj, DSRPath): self._putdsrpath(obj, req_num) elif isinstance(obj, RPath): self._putrpath(obj, req_num) elif isinstance(obj, RORPath): self._putrorpath(obj, req_num) elif ((hasattr(obj, "read") or hasattr(obj, "write")) @@ -148,6 +150,11 @@ class LowLevelPipeConnection(Connection): tempfile.index, tempfile.data) self._write("t", cPickle.dumps(tf_repr, 1), req_num) + def _putdsrpath(self, dsrpath, req_num): + """Put DSRPath into pipe. See _putrpath""" + dsrpath_repr = (dsrpath.conn.conn_number, dsrpath.getstatedict()) + self._write("d", cPickle.dumps(dsrpath_repr, 1), req_num) + def _putrpath(self, rpath, req_num): """Put an rpath into the pipe @@ -219,23 +226,22 @@ class LowLevelPipeConnection(Connection): ord(header_string[1]), self._s2l(header_string[2:])) except IndexError: raise ConnectionError() - if format_string == "o": result = cPickle.loads(self._read(length)) - elif format_string == "b": result = self._read(length) - elif format_string == "f": - result = VirtualFile(self, int(self._read(length))) + if format_string == "q": raise ConnectionQuit("Received quit signal") + + data = self._read(length) + if format_string == "o": result = cPickle.loads(data) + elif format_string == "b": result = data + elif format_string == "f": result = VirtualFile(self, int(data)) elif format_string == "i": - result = RORPIter.FromFile(BufferedRead( - VirtualFile(self, int(self._read(length))))) - elif format_string == "t": - result = self._gettempfile(self._read(length)) - elif format_string == "r": - result = self._getrorpath(self._read(length)) - elif format_string == "R": result = self._getrpath(self._read(length)) - elif format_string == "c": - result = Globals.connection_dict[int(self._read(length))] + result = RORPIter.FromFile(BufferedRead(VirtualFile(self, + int(data)))) + elif format_string == "t": result = self._gettempfile(data) + elif format_string == "r": result = self._getrorpath(data) + elif format_string == "R": result = self._getrpath(data) + elif format_string == "d": result = self._getdsrpath(data) else: - assert format_string == "q", header_string - raise ConnectionQuit("Received quit signal") + assert format_string == "c", header_string + result = Globals.connection_dict[int(data)] Log.conn("received", result, req_num) return (req_num, result) @@ -255,6 +261,15 @@ class LowLevelPipeConnection(Connection): conn_number, base, index, data = cPickle.loads(raw_rpath_buf) return RPath(Globals.connection_dict[conn_number], base, index, data) + def _getdsrpath(self, raw_dsrpath_buf): + """Return DSRPath object indicated by buf""" + conn_number, state_dict = cPickle.loads(raw_dsrpath_buf) + empty_dsrp = DSRPath("bypass", Globals.local_connection, None) + empty_dsrp.__setstate__(state_dict) + empty_dsrp.conn = Globals.connection_dict[conn_number] + empty_dsrp.file = None + return empty_dsrp + def _close(self): """Close the pipes associated with the connection""" self.outpipe.close() |