Rev 963: Wrap more ra functions. in file:///data/jelmer/bzr-svn/pyrex/
Jelmer Vernooij
jelmer at samba.org
Thu Mar 13 17:29:37 GMT 2008
At file:///data/jelmer/bzr-svn/pyrex/
------------------------------------------------------------
revno: 963
revision-id:jelmer at samba.org-20080313172936-2p4ayu4auh9yglq9
parent: jelmer at samba.org-20080313170828-3ni4evu6st0ifys1
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: pyrex
timestamp: Thu 2008-03-13 18:29:36 +0100
message:
Wrap more ra functions.
modified:
ra.pyx ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
transport.py transport.py-20060406231150-b3472d06b3a0818d
=== modified file 'ra.pyx'
--- a/ra.pyx 2008-03-13 17:08:28 +0000
+++ b/ra.pyx 2008-03-13 17:29:36 +0000
@@ -77,6 +77,7 @@
ctypedef struct svn_string_t:
char *data
long len
+ svn_string_t *svn_string_ncreate(char *bytes, long size, apr_pool_t *pool)
cdef extern from "svn_delta.h":
ctypedef struct svn_txdelta_window_t
@@ -151,6 +152,11 @@
cdef extern from "svn_types.h":
ctypedef svn_error_t *(*svn_log_message_receiver_t) (baton, apr_hash_t *changed_paths, long revision, char *author, char *date, char *message, apr_pool_t *pool) except *
+ ctypedef enum svn_node_kind_t:
+ svn_node_node
+ svn_node_file
+ svn_node_dir
+ svn_node_unknown
ctypedef struct svn_commit_info_t:
long revision
char *date
@@ -175,6 +181,7 @@
baton(py_changed_paths, revision, author, date, message)
cdef extern from "svn_ra.h":
+ ctypedef struct svn_lock_t
svn_version_t *svn_ra_version()
ctypedef struct svn_ra_reporter2_t:
@@ -287,6 +294,32 @@
int keep_locks,
apr_pool_t *pool)
+ svn_error_t *svn_ra_change_rev_prop(svn_ra_session_t *session,
+ long rev,
+ char *name,
+ svn_string_t *value,
+ apr_pool_t *pool)
+
+ svn_error_t *svn_ra_get_dir2(svn_ra_session_t *session,
+ apr_hash_t **dirents,
+ long *fetched_rev,
+ apr_hash_t **props,
+ char *path,
+ long revision,
+ long dirent_fields,
+ apr_pool_t *pool)
+
+ svn_error_t *svn_ra_get_lock(svn_ra_session_t *session,
+ svn_lock_t **lock,
+ char *path,
+ apr_pool_t *pool)
+
+ svn_error_t *svn_ra_check_path(svn_ra_session_t *session,
+ char *path,
+ long revision,
+ svn_node_kind_t *kind,
+ apr_pool_t *pool)
+
cdef class Reporter:
"""Change reporter."""
@@ -448,7 +481,7 @@
apr_pool_destroy(temp_pool)
return py_props
- def get_commit_editor(self, log_msg, commit_callback, lock_tokens,
+ def get_commit_editor(self, revprops, commit_callback, lock_tokens,
keep_locks):
cdef apr_pool_t *temp_pool
cdef svn_delta_editor_t *editor
@@ -456,11 +489,51 @@
cdef apr_hash_t *hash_lock_tokens
temp_pool = Pool(self.pool)
_check_error(svn_ra_get_commit_editor2(self.ra, &editor,
- &edit_baton, log_msg, py_commit_callback, commit_callback,
- hash_lock_tokens, keep_locks, temp_pool))
+ &edit_baton, revprops[SVN_PROP_REVISION_LOG], py_commit_callback,
+ commit_callback, hash_lock_tokens, keep_locks, temp_pool))
apr_pool_destroy(temp_pool)
return None # FIXME: convert editor
+ def change_rev_prop(self, rev, name, value):
+ cdef apr_pool_t *temp_pool
+ cdef svn_string_t *val_string
+ temp_pool = Pool(self.pool)
+ val_string = svn_string_ncreate(value, len(value), temp_pool)
+ _check_error(svn_ra_change_rev_prop(self.ra, rev, name,
+ val_string, temp_pool))
+ apr_pool_destroy(temp_pool)
+
+ def get_dir(self, path, revision, dirent_fields):
+ cdef apr_pool_t *temp_pool
+ cdef apr_hash_t *dirents
+ cdef apr_hash_t *props
+ cdef long fetch_rev
+ temp_pool = Pool(self.pool)
+ _check_error(svn_ra_get_dir2(self.ra, &dirents, &fetch_rev, &props,
+ path, revision, dirent_fields, temp_pool))
+ # FIXME: Convert dirents to python hash
+ # FIXME: Convert props to python hash
+ py_dirents = {}
+ py_props = {}
+ apr_pool_destroy(temp_pool)
+ return (py_dirents, fetch_rev, py_props)
+
+ def get_lock(self, path):
+ cdef svn_lock_t *lock
+ cdef apr_pool_t *temp_pool
+ temp_pool = Pool(self.pool)
+ _check_error(svn_ra_get_lock(self.ra, &lock, path, temp_pool))
+ apr_pool_destroy(temp_pool)
+ return lock
+
+ def check_path(self, path, revision):
+ cdef svn_node_kind_t kind
+ cdef apr_pool_t *temp_pool
+ temp_pool = Pool(self.pool)
+ _check_error(svn_ra_check_path(self.ra, path, revision, &kind,
+ temp_pool))
+ apr_pool_destroy(temp_pool)
+ return kind
def __dealloc__(self):
if self.pool != NULL:
@@ -468,3 +541,5 @@
def __repr__(self):
return "%s(%r)" % (self.__class__.__name__, self.url)
+
+SVN_PROP_REVISION_LOG = "svn:log"
=== modified file 'transport.py'
--- a/transport.py 2008-03-13 17:08:28 +0000
+++ b/transport.py 2008-03-13 17:29:36 +0000
@@ -101,21 +101,6 @@
return url.rstrip('/')
-def needs_busy(unbound):
- """Decorator that marks a transport as busy before running a methd on it.
- """
- def convert(self, *args, **kwargs):
- self._mark_busy()
- try:
- return unbound(self, *args, **kwargs)
- finally:
- self._unmark_busy()
-
- convert.__doc__ = unbound.__doc__
- convert.__name__ = unbound.__name__
- return convert
-
-
class Editor:
"""Simple object wrapper around the Subversion delta editor interface."""
def __init__(self, transport, (editor, editor_baton)):
@@ -142,7 +127,6 @@
def close(self):
assert self.recent_baton == []
svn.delta.editor_invoke_close_edit(self.editor, self.editor_baton)
- self._transport._unmark_busy()
@convert_svn_error
def apply_textdelta(self, baton, *args, **kwargs):
@@ -237,16 +221,6 @@
from bzrlib.plugins.svn import lazy_check_versions
lazy_check_versions()
- self._busy = False
-
- def _mark_busy(self):
- assert not self._busy
- self._busy = True
-
- def _unmark_busy(self):
- assert self._busy
- self._busy = False
-
def mutter(self, text):
if 'transport' in debug.debug_flags:
mutter(text)
@@ -268,7 +242,6 @@
raise TransportNotPossible('stat not supported on Subversion')
@convert_svn_error
- @needs_busy
def get_uuid(self):
self.mutter('svn get-uuid')
return self._ra.get_uuid()
@@ -281,7 +254,6 @@
return root
@convert_svn_error
- @needs_busy
def get_svn_repos_root(self):
if self._root is None:
self.mutter("svn get-repos-root")
@@ -289,7 +261,6 @@
return self._root
@convert_svn_error
- @needs_busy
def get_latest_revnum(self):
self.mutter("svn get-latest-revnum")
return self._ra.get_latest_revnum()
@@ -304,11 +275,9 @@
def do_switch(self, switch_rev, recurse, switch_url, editor, pool=None):
self._open_real_transport()
self.mutter('svn switch -r %d -> %r' % (switch_rev, switch_url))
- self._mark_busy()
return self._ra.do_switch(switch_rev, "", recurse, switch_url, editor)
@convert_svn_error
- @needs_busy
def get_log(self, path, from_revnum, to_revnum, limit, discover_changed_paths,
strict_node_history, revprops, rcvr, pool=None):
self.mutter('svn log %r:%r %r' % (from_revnum, to_revnum, path))
@@ -353,12 +322,11 @@
self.reparent(self.get_repos_root())
@convert_svn_error
- def change_rev_prop(self, revnum, name, value, pool=None):
+ def change_rev_prop(self, revnum, name, value):
self.mutter('svn revprop -r%d --set %s=%s' % (revnum, name, value))
- svn.ra.change_rev_prop(self._ra, revnum, name, value)
+ self._ra.change_rev_prop(revnum, name, value)
@convert_svn_error
- @needs_busy
def reparent(self, url):
url = url.rstrip("/")
self.base = url
@@ -375,7 +343,6 @@
self._backing_url = self.svn_url
@convert_svn_error
- @needs_busy
def get_dir(self, path, revnum, pool=None, kind=False):
self.mutter("svn ls -r %d '%r'" % (revnum, path))
assert len(path) == 0 or path[0] != "/"
@@ -386,7 +353,7 @@
fields = 0
if kind:
fields += svn.core.SVN_DIRENT_KIND
- return svn.ra.get_dir2(self._ra, path, revnum, fields)
+ return self._ra.get_dir(path, revnum, fields)
else:
return svn.ra.get_dir(self._ra, path, revnum)
@@ -414,9 +381,8 @@
return dirents.keys()
@convert_svn_error
- @needs_busy
def get_lock(self, path):
- return svn.ra.get_lock(self._ra, path)
+ return self._ra.get_lock(path)
class SvnLock:
def __init__(self, transport, tokens):
@@ -427,14 +393,12 @@
self.transport.unlock(self.locks)
@convert_svn_error
- @needs_busy
def unlock(self, locks, break_lock=False):
def lock_cb(baton, path, do_lock, lock, ra_err, pool):
pass
return svn.ra.unlock(self._ra, locks, break_lock, lock_cb)
@convert_svn_error
- @needs_busy
def lock_write(self, path_revs, comment=None, steal_lock=False):
return self.PhonyLock() # FIXME
tokens = {}
@@ -444,15 +408,13 @@
return SvnLock(self, tokens)
@convert_svn_error
- @needs_busy
- def check_path(self, path, revnum, *args, **kwargs):
+ def check_path(self, path, revnum):
assert len(path) == 0 or path[0] != "/"
path = self._request_path(path)
self.mutter("svn check_path -r%d %s" % (revnum, path))
- return svn.ra.check_path(self._ra, path.encode('utf-8'), revnum, *args, **kwargs)
+ return self._ra.check_path(path.encode('utf-8'), revnum)
@convert_svn_error
- @needs_busy
def mkdir(self, relpath, mode=None):
assert len(relpath) == 0 or relpath[0] != "/"
path = urlutils.join(self.svn_url, relpath)
@@ -469,14 +431,12 @@
def replay(self, revision, low_water_mark, send_deltas, editor):
self._open_real_transport()
self.mutter('svn replay -r%r:%r' % (low_water_mark, revision))
- self._mark_busy()
self._ra.replay(revision, low_water_mark, send_deltas, editor)
@convert_svn_error
def do_update(self, revnum, recurse, editor):
self._open_real_transport()
self.mutter('svn update -r %r' % revnum)
- self._mark_busy()
return self._ra.do_update(revnum, "", recurse, editor))
@convert_svn_error
@@ -491,22 +451,7 @@
@convert_svn_error
def get_commit_editor(self, revprops, done_cb, lock_token, keep_locks):
self._open_real_transport()
- self._mark_busy()
- try:
- if hasattr(svn.ra, 'get_commit_editor3'):
- editor = svn.ra.get_commit_editor3(self._ra, revprops, done_cb,
- lock_token, keep_locks)
- elif revprops.keys() != [svn.core.SVN_PROP_REVISION_LOG]:
- raise NotImplementedError()
- else:
- editor = svn.ra.get_commit_editor2(self._ra,
- revprops[svn.core.SVN_PROP_REVISION_LOG],
- done_cb, lock_token, keep_locks)
-
- return Editor(self, editor)
- except:
- self._unmark_busy()
- raise
+ self._ra.get_commit_editor(revprops, done_cb, lock_token, keep_locks)
def listable(self):
"""See Transport.listable().
More information about the bazaar-commits
mailing list