Rev 991: Wrap svn_client_log(), fix crashes in delta editor. in file:///data/jelmer/bzr-svn/pyrex/
Jelmer Vernooij
jelmer at samba.org
Sun Mar 16 12:26:35 GMT 2008
At file:///data/jelmer/bzr-svn/pyrex/
------------------------------------------------------------
revno: 991
revision-id:jelmer at samba.org-20080316122631-bhzx47o9a3f997dk
parent: jelmer at samba.org-20080316061105-i6aj14eqaagphure
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: pyrex
timestamp: Sun 2008-03-16 13:26:31 +0100
message:
Wrap svn_client_log(), fix crashes in delta editor.
modified:
client.pyx client.pyx-20080313235339-wbyjbw2namuiql8f-1
core.pxd core.pxd-20080314004625-ng663dn07ewpc26a-1
core.pyx core.pyx-20080313210413-17k59slolpfe5kdq-1
ra.pyx ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
transport.py transport.py-20060406231150-b3472d06b3a0818d
types.pxd types.pxi-20080313202425-vtt1ry64o98kgpg8-1
=== modified file 'client.pyx'
--- a/client.pyx 2008-03-16 05:56:59 +0000
+++ b/client.pyx 2008-03-16 12:26:31 +0000
@@ -17,8 +17,8 @@
from apr cimport apr_initialize, apr_hash_t, apr_time_t
from apr cimport apr_array_header_t, apr_array_make, apr_array_push
from apr cimport apr_pool_t, apr_pool_destroy
-from types cimport svn_error_t, svn_cancel_func_t, svn_auth_baton_t, svn_revnum_t, svn_boolean_t, svn_commit_info_t, svn_string_t
-from core cimport Pool, check_error, string_list_to_apr_array
+from types cimport svn_error_t, svn_cancel_func_t, svn_auth_baton_t, svn_revnum_t, svn_boolean_t, svn_commit_info_t, svn_string_t, svn_log_message_receiver_t
+from core cimport Pool, check_error, string_list_to_apr_array, py_svn_log_wrapper
# Make sure APR is initialized
apr_initialize()
@@ -158,6 +158,18 @@
svn_revnum_t *set_rev,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
+
+ svn_error_t *svn_client_log3(apr_array_header_t *targets,
+ svn_opt_revision_t *peg_revision,
+ svn_opt_revision_t *start,
+ svn_opt_revision_t *end,
+ int limit,
+ svn_boolean_t discover_changed_paths,
+ svn_boolean_t strict_node_history,
+ svn_log_message_receiver_t receiver,
+ receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
cdef svn_error_t *py_log_msg_func2(char **log_msg, char **tmp_file, apr_array_header_t *commit_items, baton, apr_pool_t *pool) except *:
py_commit_items = []
@@ -280,3 +292,12 @@
check_error(svn_client_revprop_set(propname, &c_val, url,
&c_rev, &set_rev, force, self.client, self.pool))
return set_rev
+
+ def log(self, targets, callback, peg_revision=None, start=None, end=None,
+ limit=0, discover_changed_paths=True, strict_node_history=True):
+ cdef svn_opt_revision_t c_peg_rev, c_start_rev, c_end_rev
+ to_opt_revision(peg_revision, &c_peg_rev)
+ to_opt_revision(start, &c_start_rev)
+ to_opt_revision(end, &c_end_rev)
+ check_error(svn_client_log3(string_list_to_apr_array(self.pool, targets),
+ &c_peg_rev, &c_start_rev, &c_end_rev, limit, discover_changed_paths, strict_node_history, py_svn_log_wrapper, callback, self.client, self.pool))
=== modified file 'core.pxd'
--- a/core.pxd 2008-03-15 19:13:59 +0000
+++ b/core.pxd 2008-03-16 12:26:31 +0000
@@ -15,10 +15,11 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-from apr cimport apr_pool_t, apr_array_header_t
+from apr cimport apr_pool_t, apr_array_header_t, apr_hash_t
from types cimport svn_error_t, svn_lock_t
cdef apr_pool_t *Pool(apr_pool_t *parent)
cdef check_error(svn_error_t *error)
cdef svn_error_t *py_cancel_func(cancel_baton)
cdef wrap_lock(svn_lock_t *)
cdef apr_array_header_t *string_list_to_apr_array(apr_pool_t *pool, object l)
+cdef svn_error_t *py_svn_log_wrapper(baton, apr_hash_t *changed_paths, long revision, char *author, char *date, char *message, apr_pool_t *pool) except *
=== modified file 'core.pyx'
--- a/core.pyx 2008-03-16 05:24:21 +0000
+++ b/core.pyx 2008-03-16 12:26:31 +0000
@@ -14,11 +14,12 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-from types cimport svn_error_t, svn_node_kind_t, svn_node_dir, svn_node_file, svn_node_unknown, svn_node_none, svn_error_create
+from types cimport svn_error_t, svn_node_kind_t, svn_node_dir, svn_node_file, svn_node_unknown, svn_node_none, svn_error_create, svn_log_message_receiver_t, svn_log_changed_path_t
from apr cimport apr_initialize, apr_status_t, apr_time_t, apr_hash_t
from apr cimport apr_pool_t, apr_pool_create, apr_pool_destroy
from apr cimport apr_array_header_t, apr_array_make, apr_array_push
from apr cimport apr_hash_index_t, apr_hash_this, apr_hash_first, apr_hash_next
+from constants import PROP_REVISION_LOG, PROP_REVISION_AUTHOR, PROP_REVISION_DATE
apr_initialize()
@@ -123,3 +124,32 @@
el = <char **>apr_array_push(ret)
el[0] = i
return ret
+
+cdef svn_error_t *py_svn_log_wrapper(baton, apr_hash_t *changed_paths, long revision, char *author, char *date, char *message, apr_pool_t *pool) except *:
+ cdef apr_hash_index_t *idx
+ cdef char *key
+ cdef long klen
+ cdef svn_log_changed_path_t *val
+ if changed_paths == NULL:
+ py_changed_paths = None
+ else:
+ py_changed_paths = {}
+ idx = apr_hash_first(pool, changed_paths)
+ while idx:
+ apr_hash_this(idx, <void **>&key, &klen, <void **>&val)
+ if val.copyfrom_path != NULL:
+ py_changed_paths[key] = (chr(val.action), val.copyfrom_path,
+ val.copyfrom_rev)
+ else:
+ py_changed_paths[key] = (chr(val.action), None, -1)
+ idx = apr_hash_next(idx)
+ revprops = {}
+ if message != NULL:
+ revprops[PROP_REVISION_LOG] = message
+ if author != NULL:
+ revprops[PROP_REVISION_AUTHOR] = author
+ if date != NULL:
+ revprops[PROP_REVISION_DATE] = date
+ baton(py_changed_paths, revision, revprops)
+
+
=== modified file 'ra.pyx'
--- a/ra.pyx 2008-03-16 05:56:59 +0000
+++ b/ra.pyx 2008-03-16 12:26:31 +0000
@@ -19,11 +19,11 @@
from apr cimport apr_array_header_t, apr_array_make
from apr cimport apr_file_t, apr_off_t, apr_size_t
from apr cimport apr_initialize
-from core cimport check_error, Pool, wrap_lock, string_list_to_apr_array
+from core cimport check_error, Pool, wrap_lock, string_list_to_apr_array, py_svn_log_wrapper
from core import SubversionException
from constants import PROP_REVISION_LOG, PROP_REVISION_AUTHOR, PROP_REVISION_DATE
from types cimport svn_error_t, svn_revnum_t, svn_string_t, svn_version_t
-from types cimport svn_string_ncreate, svn_lock_t, svn_auth_baton_t, svn_auth_open, svn_auth_set_parameter, svn_auth_get_parameter, svn_node_kind_t, svn_commit_info_t, svn_stream_t, svn_filesize_t, svn_dirent_t
+from types cimport svn_string_ncreate, svn_lock_t, svn_auth_baton_t, svn_auth_open, svn_auth_set_parameter, svn_auth_get_parameter, svn_node_kind_t, svn_commit_info_t, svn_stream_t, svn_filesize_t, svn_dirent_t, svn_log_message_receiver_t
apr_initialize()
@@ -129,43 +129,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 svn_error_t *(*svn_commit_callback2_t) (svn_commit_info_t *commit_info, baton, apr_pool_t *pool) except *
- ctypedef struct svn_log_changed_path_t:
- char action
- char *copyfrom_path
- svn_revnum_t copyfrom_rev
cdef svn_error_t *py_commit_callback(svn_commit_info_t *commit_info, baton, apr_pool_t *pool) except *:
baton(commit_info.revision, commit_info.date, commit_info.author, commit_info.post_commit_err)
-cdef svn_error_t *py_svn_log_wrapper(baton, apr_hash_t *changed_paths, long revision, char *author, char *date, char *message, apr_pool_t *pool) except *:
- cdef apr_hash_index_t *idx
- cdef char *key
- cdef long klen
- cdef svn_log_changed_path_t *val
- if changed_paths == NULL:
- py_changed_paths = None
- else:
- py_changed_paths = {}
- idx = apr_hash_first(pool, changed_paths)
- while idx:
- apr_hash_this(idx, <void **>&key, &klen, <void **>&val)
- if val.copyfrom_path != NULL:
- py_changed_paths[key] = (chr(val.action), val.copyfrom_path,
- val.copyfrom_rev)
- else:
- py_changed_paths[key] = (chr(val.action), None, -1)
- idx = apr_hash_next(idx)
- revprops = {}
- if message != NULL:
- revprops[PROP_REVISION_LOG] = message
- if author != NULL:
- revprops[PROP_REVISION_AUTHOR] = author
- if date != NULL:
- revprops[PROP_REVISION_DATE] = date
- baton(py_changed_paths, revision, revprops)
-
cdef extern from "svn_ra.h":
svn_version_t *svn_ra_version()
@@ -465,8 +433,13 @@
def add_directory(self, path, copyfrom_path=None, copyfrom_rev=-1):
cdef void *child_baton
+ cdef char *c_copyfrom_path
+ if copyfrom_path is None:
+ c_copyfrom_path = NULL
+ else:
+ c_copyfrom_path = copyfrom_path
check_error(self.editor.add_directory(path, self.dir_baton,
- copyfrom_path, copyfrom_rev, self.pool, &child_baton))
+ c_copyfrom_path, copyfrom_rev, self.pool, &child_baton))
return new_dir_editor(self.editor, child_baton, self.pool)
def open_directory(self, path, base_revision=None):
@@ -491,10 +464,15 @@
check_error(self.editor.absent_directory(path, self.dir_baton,
self.pool))
- def add_file(self, path, copy_path, copy_rev):
+ def add_file(self, path, copy_path=None, copy_rev=-1):
cdef void *file_baton
cdef FileEditor py_file_editor
- check_error(self.editor.add_file(path, self.dir_baton, copy_path,
+ cdef char *c_copy_path
+ if copy_path is None:
+ c_copy_path = NULL
+ else:
+ c_copy_path = copy_path
+ check_error(self.editor.add_file(path, self.dir_baton, c_copy_path,
copy_rev, self.pool, &file_baton))
py_file_editor = FileEditor()
py_file_editor.editor = self.editor
@@ -536,7 +514,7 @@
check_error(self.editor.set_target_revision(self.edit_baton,
target_revision, self.pool))
- def open_root(self, base_revision):
+ def open_root(self, base_revision=-1):
cdef void *root_baton
check_error(self.editor.open_root(self.edit_baton, base_revision,
self.pool, &root_baton))
@@ -548,6 +526,9 @@
def abort(self):
check_error(self.editor.abort_edit(self.edit_baton, self.pool))
+ def __dealloc__(self):
+ apr_pool_destroy(self.pool)
+
def version():
"""Get libsvn_ra version information.
@@ -848,10 +829,10 @@
check_error(svn_ra_get_commit_editor2(self.ra, &editor,
&edit_baton, revprops[PROP_REVISION_LOG], py_commit_callback,
commit_callback, hash_lock_tokens, keep_locks, temp_pool))
- apr_pool_destroy(temp_pool)
py_editor = Editor()
py_editor.editor = editor
py_editor.edit_baton = edit_baton
+ py_editor.pool = temp_pool
return py_editor
def change_rev_prop(self, rev, name, value):
=== modified file 'transport.py'
--- a/transport.py 2008-03-16 05:24:21 +0000
+++ b/transport.py 2008-03-16 12:26:31 +0000
@@ -299,7 +299,8 @@
@convert_svn_error
def get_commit_editor(self, revprops, done_cb, lock_token, keep_locks):
self._open_real_transport()
- self._ra.get_commit_editor(revprops, done_cb, lock_token, keep_locks)
+ return self._ra.get_commit_editor(revprops, done_cb, lock_token,
+ keep_locks)
def listable(self):
"""See Transport.listable().
=== modified file 'types.pxd'
--- a/types.pxd 2008-03-16 02:30:29 +0000
+++ b/types.pxd 2008-03-16 12:26:31 +0000
@@ -66,6 +66,11 @@
svn_revnum_t created_rev
apr_time_t time
char *last_author
+ ctypedef struct svn_log_changed_path_t:
+ char action
+ char *copyfrom_path
+ svn_revnum_t copyfrom_rev
+ 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 *
cdef extern from "svn_string.h":
ctypedef struct svn_string_t:
More information about the bazaar-commits
mailing list