Rev 964: Wrap last few ra functions. in file:///data/jelmer/bzr-svn/pyrex/

Jelmer Vernooij jelmer at samba.org
Thu Mar 13 17:43:13 GMT 2008


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

------------------------------------------------------------
revno: 964
revision-id:jelmer at samba.org-20080313174312-k5yhzqrgmrd141oo
parent: jelmer at samba.org-20080313172936-2p4ayu4auh9yglq9
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: pyrex
timestamp: Thu 2008-03-13 18:43:12 +0100
message:
  Wrap last few ra functions.
modified:
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  ra.pyx                         ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
  transport.py                   transport.py-20060406231150-b3472d06b3a0818d
=== modified file 'fetch.py'
--- a/fetch.py	2008-03-04 16:16:48 +0000
+++ b/fetch.py	2008-03-13 17:43:12 +0000
@@ -577,7 +577,7 @@
         self.fetch(revision_id, pb, find_ghosts=False)
 
     def _fetch_replay(self, revids, pb=None):
-        """Copy a set of related revisions using svn.ra.replay.
+        """Copy a set of related revisions using ra_replay.
 
         :param revids: Revision ids to copy.
         :param pb: Optional progress bar
@@ -585,7 +585,7 @@
         raise NotImplementedError(self._copy_revisions_replay)
 
     def _fetch_switch(self, revids, pb=None, lhs_parent=None):
-        """Copy a set of related revisions using svn.ra.switch.
+        """Copy a set of related revisions using ra_switch.
 
         :param revids: List of revision ids of revisions to copy, 
                        newest first.

=== modified file 'ra.pyx'
--- a/ra.pyx	2008-03-13 17:29:36 +0000
+++ b/ra.pyx	2008-03-13 17:43:12 +0000
@@ -320,6 +320,37 @@
                                    svn_node_kind_t *kind,
                                    apr_pool_t *pool)
 
+    svn_error_t *svn_ra_has_capability(svn_ra_session_t *session,
+                          int *has, char *capability, apr_pool_t *pool)
+
+    ctypedef svn_error_t *(*svn_ra_lock_callback_t)(baton, char *path,
+                                               int do_lock,
+                                               svn_lock_t *lock,
+                                               svn_error_t *ra_err,
+                                               apr_pool_t *pool)
+
+    svn_error_t * svn_ra_unlock(svn_ra_session_t *session,
+                  apr_hash_t *path_tokens,
+                  int break_lock,
+                  svn_ra_lock_callback_t lock_func,
+                  lock_baton,
+                  apr_pool_t *pool)
+
+    svn_error_t *svn_ra_lock(svn_ra_session_t *session,
+                apr_hash_t *path_revs,
+                char *comment,
+                int steal_lock,
+                svn_ra_lock_callback_t lock_func,
+                lock_baton,
+                apr_pool_t *pool)
+
+
+cdef svn_error_t *py_lock_func (baton, char *path, int do_lock, 
+                                svn_lock_t *lock, svn_error_t *ra_err, 
+                                apr_pool_t *pool):
+    # FIXME: pass lock and ra_err, too
+    baton(path, do_lock)
+
 
 cdef class Reporter:
     """Change reporter."""
@@ -489,8 +520,8 @@
         cdef apr_hash_t *hash_lock_tokens
         temp_pool = Pool(self.pool)
         _check_error(svn_ra_get_commit_editor2(self.ra, &editor, 
-			&edit_baton, revprops[SVN_PROP_REVISION_LOG], 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
 
@@ -535,6 +566,33 @@
         apr_pool_destroy(temp_pool)
         return kind
 
+    def has_capability(self, capability):
+        cdef apr_pool_t *temp_pool
+        cdef int has
+        temp_pool = Pool(self.pool)
+        _check_error(svn_ra_has_capability(self.ra, &has, capability, 
+                     temp_pool))
+        apr_pool_destroy(temp_pool)
+        return has
+
+    def unlock(self, path_tokens, break_lock, lock_func):
+        cdef apr_pool_t *temp_pool
+        cdef apr_hash_t *hash_path_tokens
+        temp_pool = Pool(self.pool)
+        # FIXME: Convert path_tokens to a apr_hash
+        _check_error(svn_ra_unlock(self.ra, hash_path_tokens, break_lock,
+                     py_lock_func, lock_func, temp_pool))
+        apr_pool_destroy(temp_pool)
+
+    def lock(self, path_revs, comment, steal_lock, lock_func):
+        cdef apr_pool_t *temp_pool
+        cdef apr_hash_t *hash_path_revs
+        # FIXME: Create hash_path_revs
+        temp_pool = Pool(self.pool)
+        _check_error(svn_ra_lock(self.ra, hash_path_revs, comment, steal_lock,
+                     py_lock_func, lock_func, temp_pool))
+        apr_pool_destroy(temp_pool)
+
     def __dealloc__(self):
         if self.pool != NULL:
             apr_pool_destroy(self.pool)

=== modified file 'transport.py'
--- a/transport.py	2008-03-13 17:29:36 +0000
+++ b/transport.py	2008-03-13 17:43:12 +0000
@@ -279,35 +279,11 @@
 
     @convert_svn_error
     def get_log(self, path, from_revnum, to_revnum, limit, discover_changed_paths, 
-                strict_node_history, revprops, rcvr, pool=None):
+                strict_node_history, revprops, rcvr):
         self.mutter('svn log %r:%r %r' % (from_revnum, to_revnum, path))
-        if hasattr(svn.ra, 'get_log2'):
-            return svn.ra.get_log2(self._ra, [self._request_path(path)], 
-                           from_revnum, to_revnum, limit, discover_changed_paths,
-                           strict_node_history, False, 
-                           revprops, rcvr, pool)
-
-        class LogEntry:
-            def __init__(self, changed_paths, rev, author, date, message):
-                self.changed_paths = changed_paths
-                self.revprops = {}
-                if svn.core.SVN_PROP_REVISION_AUTHOR in revprops:
-                    self.revprops[svn.core.SVN_PROP_REVISION_AUTHOR] = author
-                if svn.core.SVN_PROP_REVISION_LOG in revprops:
-                    self.revprops[svn.core.SVN_PROP_REVISION_LOG] = message
-                if svn.core.SVN_PROP_REVISION_DATE in revprops:
-                    self.revprops[svn.core.SVN_PROP_REVISION_DATE] = date
-                # FIXME: Check other revprops
-                # FIXME: Handle revprops is None
-                self.revision = rev
-                self.has_children = None
-
-        def rcvr_convert(orig_paths, rev, author, date, message, pool):
-            rcvr(LogEntry(orig_paths, rev, author, date, message), pool)
-
-        return svn.ra.get_log(self._ra, [self._request_path(path)], 
+        return self._ra.get_log([self._request_path(path)], 
                               from_revnum, to_revnum, limit, discover_changed_paths, 
-                              strict_node_history, rcvr_convert, pool)
+                              strict_node_history, revprops, rcvr_convert)
 
     def _open_real_transport(self):
         if self._backing_url != self.svn_url:
@@ -333,9 +309,9 @@
         self.svn_url = bzr_to_svn_url(url)
         if self.svn_url == self._backing_url:
             return
-        if hasattr(svn.ra, 'reparent'):
+        if hasattr(self._ra, 'reparent'):
             self.mutter('svn reparent %r' % url)
-            self.ra.reparent(self.svn_url, self.pool)
+            self._ra.reparent(self.svn_url, self.pool)
         else:
             self.mutter('svn reparent (reconnect) %r' % url)
             self._ra = svn.client.open_ra_session(self.svn_url.encode('utf8'), 
@@ -349,13 +325,10 @@
         path = self._request_path(path)
         # ra_dav backends fail with strange errors if the path starts with a 
         # slash while other backends don't.
-        if hasattr(svn.ra, 'get_dir2'):
-            fields = 0
-            if kind:
-                fields += svn.core.SVN_DIRENT_KIND
-            return self._ra.get_dir(path, revnum, fields)
-        else:
-            return svn.ra.get_dir(self._ra, path, revnum)
+        fields = 0
+        if kind:
+            fields += svn.core.SVN_DIRENT_KIND
+        return self._ra.get_dir(path, revnum, fields)
 
     def _request_path(self, relpath):
         if self._backing_url == self.svn_url:
@@ -396,7 +369,7 @@
     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)
+        return self._ra.unlock(locks, break_lock, lock_cb)
 
     @convert_svn_error
     def lock_write(self, path_revs, comment=None, steal_lock=False):
@@ -404,7 +377,7 @@
         tokens = {}
         def lock_cb(baton, path, do_lock, lock, ra_err, pool):
             tokens[path] = lock
-        svn.ra.lock(self._ra, path_revs, comment, steal_lock, lock_cb)
+        self._ra.lock(path_revs, comment, steal_lock, lock_cb)
         return SvnLock(self, tokens)
 
     @convert_svn_error
@@ -441,7 +414,7 @@
 
     @convert_svn_error
     def has_capability(self, cap):
-        return svn.ra.has_capability(self._ra, cap)
+        return self._ra.has_capability(cap)
 
     @convert_svn_error
     def revprop_list(self, revnum):




More information about the bazaar-commits mailing list