Rev 1946: Fix update. in file:///data/jelmer/bzr-svn/trunk/
Jelmer Vernooij
jelmer at samba.org
Mon Oct 6 19:46:15 BST 2008
At file:///data/jelmer/bzr-svn/trunk/
------------------------------------------------------------
revno: 1946
revision-id: jelmer at samba.org-20081006184613-mmhiqp20n1bvfj62
parent: jelmer at samba.org-20081006182342-wej8a7kzd8bo51z2
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Mon 2008-10-06 20:46:13 +0200
message:
Fix update.
modified:
server.py server.py-20081006150454-t45tvwmbhpesdh7d-1
subvertpy/subvertpy/marshall.py marshall.py-20081006140850-jzf2dbt55rwefdqm-1
subvertpy/subvertpy/server.py server.py-20081006143330-f9p0l7eih6izgoct-1
=== modified file 'server.py'
--- a/server.py 2008-10-06 18:17:27 +0000
+++ b/server.py 2008-10-06 18:46:13 +0000
@@ -100,6 +100,8 @@
return ret
def update(self, editor, revnum, target_path, recurse=True):
+ if revnum is None:
+ revnum = self.get_latest_revnum()
editor.set_target_revision(revnum)
root = editor.open_root()
# FIXME
=== modified file 'subvertpy/subvertpy/marshall.py'
--- a/subvertpy/subvertpy/marshall.py 2008-10-06 16:36:29 +0000
+++ b/subvertpy/subvertpy/marshall.py 2008-10-06 18:46:13 +0000
@@ -43,6 +43,10 @@
"""A Marshall error."""
+class NeedMoreData(MarshallError):
+ """More data needed."""
+
+
def marshall(x):
if isinstance(x, int):
return "%d " % x
@@ -60,7 +64,7 @@
def unmarshall(x):
whitespace = ['\n', ' ']
if len(x) == 0:
- raise MarshallError("Not enough data")
+ raise NeedMoreData("Not enough data")
if x[0] == "(" and x[1] == " ": # list follows
x = x[2:]
ret = []
@@ -69,7 +73,7 @@
(x, n) = unmarshall(x)
ret.append(n)
except IndexError:
- raise MarshallError("List not terminated")
+ raise NeedMoreData("List not terminated")
if not x[1] in whitespace:
raise MarshallError("Expected space, got %c" % x[1])
@@ -87,7 +91,7 @@
return (x[1:], num)
elif x[0] == ":":
if len(x) < num:
- raise MarshallError("Expected string of length %r" % num)
+ raise NeedMoreData("Expected string of length %r" % num)
return (x[num+2:], x[1:num+1])
else:
raise MarshallError("Expected whitespace or ':', got '%c" % x[0])
=== modified file 'subvertpy/subvertpy/server.py'
--- a/subvertpy/subvertpy/server.py 2008-10-06 18:23:42 +0000
+++ b/subvertpy/subvertpy/server.py 2008-10-06 18:46:13 +0000
@@ -19,7 +19,7 @@
import time
from subvertpy import ERR_RA_SVN_UNKNOWN_CMD, NODE_DIR, NODE_FILE, NODE_UNKNOWN, NODE_NONE, ERR_UNSUPPORTED_FEATURE
-from subvertpy.marshall import marshall, unmarshall, literal, MarshallError
+from subvertpy.marshall import marshall, unmarshall, literal, MarshallError, NeedMoreData
class ServerBackend:
@@ -28,6 +28,11 @@
raise NotImplementedError(self.open_repository)
+def generate_random_id():
+ import uuid
+ return str(uuid.uuid4())
+
+
class ServerRepositoryBackend:
def get_uuid(self):
@@ -198,16 +203,20 @@
def __init__(self, conn):
self.conn = conn
- def set_target_revision(self, rev):
- self.conn.send_msg(["target-rev", rev])
+ def set_target_revision(self, revnum):
+ self.conn.send_msg([literal("target-rev"), [revnum]])
def open_root(self, base_revision=None):
id = generate_random_id()
- self.send_msg(["open-root", [base_revision, tree.inventory.root.file_id]])
+ if base_revision is None:
+ baserev = []
+ else:
+ baserev = [base_revision]
+ self.conn.send_msg([literal("open-root"), [baserev, id]])
return DirectoryEditor(self.conn, id)
def close(self):
- self.conn.send_msg(["close-edit", []])
+ self.conn.send_msg([literal("close-edit"), []])
class DirectoryEditor:
@@ -226,7 +235,7 @@
return DirectoryEditor(self.conn, child)
def close(self):
- self.conn.send_msg(["close-dir", [self.id]])
+ self.conn.send_msg([literal("close-dir"), [self.id]])
class FileEditor:
@@ -301,13 +310,15 @@
self._stop = True
def recv_msg(self):
- # FIXME: Blocking read?
+ # TODO: socket read should be blocking
while True:
try:
- self.inbuffer += self.recv_fn(512)
(self.inbuffer, ret) = unmarshall(self.inbuffer)
- self.mutter("IN: %r" % ret)
return ret
+ except NeedMoreData:
+ newdata = self.recv_fn(512)
+ self.mutter("IN: %r" % newdata)
+ self.inbuffer += newdata
except MarshallError, e:
self.mutter('ERROR: %r' % e)
raise
More information about the bazaar-commits
mailing list