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