Rev 23: Add some more stubs, badly needs tests. in file:///home/jelmer/bzr/bzrsvnserve/

Jelmer Vernooij jelmer at samba.org
Mon Jan 22 18:53:22 GMT 2007


------------------------------------------------------------
revno: 23
revision-id: jelmer at samba.org-20070122185242-0bl6sfrx3zl79ow0
parent: jelmer at samba.org-20070122162053-ut129mvs7joysh8s
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: bzrsvnserve
timestamp: Mon 2007-01-22 19:52:42 +0100
message:
  Add some more stubs, badly needs tests.
modified:
  __init__.py                    __init__.py-20061015145107-e1erl7tzb3zk831k-1
  svnserver.py                   svnserver.py-20061015150253-0jjovnw1ax00rjlb-1
  tests/test_server.py           test_server.py-20070122114402-zcwhr4cxc67jvakf-1
=== modified file '__init__.py'
--- a/__init__.py	2007-01-22 15:21:24 +0000
+++ b/__init__.py	2007-01-22 18:52:42 +0000
@@ -58,15 +58,18 @@
             server_sock = socket.socket()
             server_sock.bind(('0.0.0.0', port))
             server_sock.listen(5)
-            def handle_connection(sock):
+            def handle_new_client(sock):
+                def handle_connection():
+                    server.serve()
+                    sock.close()
                 server = SVNServer(directory, lambda: sock.recv(1024), sock.send)
-                server_thread = threading.Thread(None, server.serve, name='svn-smart-server')
+                server_thread = threading.Thread(None, handle_connection, name='svn-smart-server')
                 server_thread.setDaemon(True)
                 server_thread.start()
                 
             while True:
                 sock, _ = server_sock.accept()
-                handle_connection(sock)
+                handle_new_client(sock)
 
 
 register_command(cmd_svnserve)

=== modified file 'svnserver.py'
--- a/svnserver.py	2007-01-22 16:20:53 +0000
+++ b/svnserver.py	2007-01-22 18:52:42 +0000
@@ -27,6 +27,10 @@
 SVN_MAJOR_VERSION = 1
 SVN_MINOR_VERSION = 2
 
+SVN_NODE_NONE = 0
+SVN_NODE_FILE = 1
+SVN_NODE_DIR = 2
+
 class SVNServer:
     def __init__(self, rootdir, recv_fn, send_fn):
         self.rootdir = rootdir
@@ -56,6 +60,9 @@
         self.send_success([], "")
         self.send_success(self.branch.revno())
 
+    def check_path(self, path, revnum):
+        return SVN_NODE_DIR
+
     def log(self, target_path, start_rev, end_rev, changed_paths, 
             strict_node, limit=None):
         def send_revision(revno, rev):
@@ -85,19 +92,62 @@
         self.send_success()
 
     def reparent(self, parent):
-        pass
+        self.send_success([], "")
+        self.send_success()
+
+    def stat(self, path, revnum):
+        self.send_success([], "")
+        self.send_success()
+
+    def update(self, rev, target, recurse):
+        import pdb
+        pdb.set_trace()
+        self.send_success([], "")
+        while True:
+            msg = self.recv_msg()
+            assert msg[0] in ["set-path", "finish-report"]
+            if msg[0] == "finish-report":
+                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)
+
 
     commands = {
             "get-latest-rev": get_latest_rev,
             "log": log,
+            "update": update,
+            "check-path": check_path,
+            "reparent": reparent,
+            "stat": stat,
             # FIXME: get-dated-rev
             # FIXME: rev-proplist
             # FIXME: rev-prop
             # FIXME: get-file
             # FIXME: get-dir
             # FIXME: check-path
-            # FIXME: stat
-            # FIXME: update
             # FIXME: switch
             # FIXME: status
             # FIXME: diff
@@ -127,7 +177,6 @@
         mutter("client supports:")
         mutter("  version %r" % version)
         mutter("  capabilities %r " % capabilities)
-
         self.send_mechs()
 
         (mech, args) = self.recv_msg()
@@ -145,6 +194,7 @@
             ( cmd, args ) = self.recv_msg()
             if not self.commands.has_key(cmd):
                 self.send_unknown(cmd)
+                return
             else:
                 self.commands[cmd](self, *args)
 

=== modified file 'tests/test_server.py'
--- a/tests/test_server.py	2007-01-22 16:19:06 +0000
+++ b/tests/test_server.py	2007-01-22 18:52:42 +0000
@@ -61,7 +61,7 @@
         self.server.branch = self.branch
         uuid.UUID(self.server.get_branch_uuid())
 
-import svn.client, svn.ra
+import svn.client, svn.ra, svn.delta
 from svn.core import Pool
 
 class NativeTestServer(TestCaseInTempDir):
@@ -85,7 +85,8 @@
         self.server_thread = threading.Thread(None, handle_connection, name='svn-smart-server')
         self.server_thread.setDaemon(True)
         self.server_thread.start()
-        self.ra = svn.client.open_ra_session("svn://%s:%d/" % addr, 
+        self.url = "svn://%s:%d/" % addr
+        self.ra = svn.client.open_ra_session(self.url,
                                             self.client_ctx, self.pool)
 
     def tearDown(self):
@@ -116,3 +117,30 @@
         wt.commit("a commit message", committer='someone')
         svn.ra.get_log(self.ra, ["/"], 0, 1, 0, False, False, rcvr, self.pool)
 
+    def test_checkout(self):
+        file('a/file', 'w').write("data")
+        wt = WorkingTree.open('a')
+        wt.add('file')
+        wt.commit("a commit message", committer='someone')
+        class Editor():
+            pass
+        editor = Editor()
+        edit, edit_baton = svn.delta.make_editor(editor, self.pool)
+        reporter, report_baton = svn.ra.do_update(self.ra, 1, self.url, 
+                                                  True, edit, edit_baton)
+        svn.ra.reporter2_invoke_set_path(reporter, report_baton, "",
+                                         0, True, None, self.pool)
+        svn.ra.reporter2_invoke_finish_report(reporter, report_baton, 
+                                              self.pool)
+
+    def test_check_path(self):
+        self.assertTrue(svn.ra.check_path(self.ra, '', 0))
+
+    def test_check_path_future(self):
+        self.assertTrue(svn.ra.check_path(self.ra, '', 1))
+
+    def test_reparent(self):
+        svn.ra.reparent(self.ra, 'someurl')
+
+    def test_stat(self):
+        svn.ra.stat(self.ra, '', 1)




More information about the bazaar-commits mailing list