summaryrefslogtreecommitdiff
path: root/rdiff-backup/rdiff_backup/connection.py
diff options
context:
space:
mode:
authorben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2002-05-10 23:14:35 +0000
committerben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2002-05-10 23:14:35 +0000
commit807241bc4f322edc6f95782291900362484263df (patch)
tree95dc93d87081ab901e31844867d4facca6207aac /rdiff-backup/rdiff_backup/connection.py
parent5c059e737511644b0056b8326b52763c82efcac4 (diff)
downloadrdiff-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.py45
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()