Rev 1937: Implement check_path, make update abstract. in file:///data/jelmer/bzr-svn/trunk/

Jelmer Vernooij jelmer at samba.org
Mon Oct 6 18:22:37 BST 2008


At file:///data/jelmer/bzr-svn/trunk/

------------------------------------------------------------
revno: 1937
revision-id: jelmer at samba.org-20081006172235-cp2sm0omf8z7euwl
parent: jelmer at samba.org-20081006164949-0q3xby1ymbh2xyal
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Mon 2008-10-06 19:22:35 +0200
message:
  Implement check_path, make update abstract.
modified:
  server.py                      server.py-20081006150454-t45tvwmbhpesdh7d-1
  subvertpy/subvertpy/server.py  server.py-20081006143330-f9p0l7eih6izgoct-1
=== modified file 'server.py'
--- a/server.py	2008-10-06 16:36:29 +0000
+++ b/server.py	2008-10-06 17:22:35 +0000
@@ -17,6 +17,7 @@
 
 from bzrlib.branch import Branch
 
+from subvertpy import NODE_DIR
 from subvertpy.server import SVNServer, ServerBackend, ServerRepositoryBackend
 from subvertpy.properties import time_to_cstring
 
@@ -83,6 +84,16 @@
                             rev.message, changed_paths=changes)
         finally:
             self.branch.repository.unlock()
+
+    def update(self, editor, revnum, target_path, recurse=True):
+        editor.set_target_revision(revnum)
+        root = editor.open_root()
+        # FIXME
+        root.close()
+        editor.close()
+
+    def check_path(self, path, revnum):
+        return NODE_DIR
     
 
 class BzrServerBackend(ServerBackend):

=== modified file 'subvertpy/subvertpy/server.py'
--- a/subvertpy/subvertpy/server.py	2008-10-06 16:49:49 +0000
+++ b/subvertpy/subvertpy/server.py	2008-10-06 17:22:35 +0000
@@ -18,7 +18,7 @@
 import os
 import time
 
-from subvertpy import NODE_NONE, NODE_FILE, NODE_DIR, ERR_RA_SVN_UNKNOWN_CMD
+from subvertpy import ERR_RA_SVN_UNKNOWN_CMD, NODE_DIR, NODE_FILE, NODE_UNKNOWN, NODE_NONE
 from subvertpy.marshall import marshall, unmarshall, literal, MarshallError
 
 
@@ -40,6 +40,12 @@
             strict_node, limit):
         raise NotImplementedError(self.log)
 
+    def update(self, editor, revnum, target_path, recurse=True):
+        raise NotImplementedError(self.update)
+
+    def check_path(self, path, revnum):
+        raise NotImplementedError(self.check_path)
+
 
 MAJOR_VERSION = 1
 MINOR_VERSION = 2
@@ -77,8 +83,12 @@
         self.send_success(self.repo_backend.get_latest_revnum())
 
     def check_path(self, path, revnum):
-        # TODO: Proper implementation
-        return NODE_DIR
+        kind = self.repo_backend.check_path(path, revnum)
+        self.send_success([], "")
+        self.send_success(literal({NODE_NONE: "none", 
+                           NODE_DIR: "dir",
+                           NODE_FILE: "file",
+                           NODE_UNKNOWN: "unknown"}[kind]))
 
     def log(self, target_path, start_rev, end_rev, changed_paths, 
             strict_node, limit=None, include_merged_revisions=False, 
@@ -93,8 +103,16 @@
                         changes.append((p, literal(action), ()))
             self.send_msg([changes, revno, [author], [date], [message]])
         self.send_success([], "")
-        self.repo_backend.log(send_revision, target_path, start_rev[0], 
-                              end_rev[0], changed_paths, strict_node, limit)
+        if len(start_rev) == 0:
+            start_revnum = None
+        else:
+            start_revnum = start_rev[0]
+        if len(end_rev) == 0:
+            end_revnum = None
+        else:
+            end_revnum = end_rev[0]
+        self.repo_backend.log(send_revision, target_path, start_revnum, 
+                              end_revnum, changed_paths, strict_node, limit)
         self.send_msg(literal("done"))
         self.send_success()
 
@@ -115,30 +133,53 @@
                 break
 
         self.send_success([], "")
-        self.send_msg(["target-rev", rev])
-        tree = self.branch.repository.revision_tree(
-                self.branch.get_rev_id(rev[0]))
-        path2id = {}
-        id2path = {}
-        self.send_msg(["open-root", [rev, tree.inventory.root.file_id]])
-        def send_children(self, id):
-            for child in tree.inventory[id].children:
-                if tree.inventory[child].kind in ('symlink', 'file'):
-                    self.send_msg(["add-file", [tree.inventory.id2path(child),
-                                                id, child]])
-                    # FIXME
-                    self.send_msg(["close-file", [child]])
-                else:
-                    self.send_msg(["add-dir", [tree.inventory.id2path(child),
-                                                id, child]])
-                    send_children(child)
-                    self.send_msg(["close-dir", [child]])
-        #send_children(tree.inventory.root.file_id)
-        self.send_msg(["close-dir", [tree.inventory.root.file_id]])
-        self.send_msg(["close-edit", []])
-        #msg = self.recv_msg()
-        #self.send_msg(msg)
-
+
+        class Editor:
+
+            def __init__(self, conn):
+                self.conn = conn
+
+            def set_target_revision(self, rev):
+                self.conn.send_msg(["target-rev", rev])
+
+            def open_root(self, base_revision=None):
+                id = generate_random_id()
+                self.send_msg(["open-root", [base_revision, tree.inventory.root.file_id]])
+                return DirectoryEditor(self.conn, id)
+
+            def close(self):
+                self.conn.send_msg(["close-edit", []])
+
+        class DirectoryEditor:
+
+            def __init__(self, conn, id):
+                self.conn = conn
+                self.id = id
+
+            def add_file(self, path):
+                child = generate_random_id()
+                self.conn.send_msg(["add-file", [path, self.id, child]])
+                return FileEditor(self.conn, child)
+
+            def add_directory(self, path):
+                child = generate_random_id()
+                self.conn.send_msg(["add-dir", [path, self.id, child]])
+                return DirectoryEditor(self.conn, child)
+
+            def close(self):
+                self.conn.send_msg(["close-dir", [self.id]])
+
+        class FileEditor:
+
+            def __init__(self, conn, id):
+                self.conn = conn
+                self.id = id
+
+            def close(self):
+                self.conn.send_msg(["close-file", [self.id]])
+
+            self.repo_backend.update(Editor(self), rev, target, recurse)
+            self.send_success([], "")
 
     commands = {
             "get-latest-rev": get_latest_rev,




More information about the bazaar-commits mailing list