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