Rev 1330: Wrap replay_range. in http://people.samba.org/bzr/jelmer/bzr-svn/0.4
Jelmer Vernooij
jelmer at samba.org
Tue Jun 24 02:09:57 BST 2008
At http://people.samba.org/bzr/jelmer/bzr-svn/0.4
------------------------------------------------------------
revno: 1330
revision-id: jelmer at samba.org-20080624010956-iiejnm9uk1peilf7
parent: jelmer at samba.org-20080624002539-4pww8iob02k2ixid
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Tue 2008-06-24 03:09:56 +0200
message:
Wrap replay_range.
modified:
ra.c ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
=== modified file 'ra.c'
--- a/ra.c 2008-06-23 15:40:07 +0000
+++ b/ra.c 2008-06-24 01:09:56 +0000
@@ -954,6 +954,80 @@
Py_RETURN_NONE;
}
+static svn_error_t *py_revstart_cb(svn_revnum_t revision, void *replay_baton,
+ const svn_delta_editor_t **editor, void **edit_baton, apr_hash_t *rev_props, apr_pool_t *pool)
+{
+ PyObject *cbs = (PyObject *)replay_baton;
+ PyObject *py_start_fn = PyTuple_GetItem(cbs, 0);
+ PyObject *py_revprops = prop_hash_to_dict(rev_props);
+ PyObject *ret;
+
+ ret = PyObject_CallFunction(py_start_fn, "lO", revision, py_revprops);
+ if (ret == NULL)
+ return py_svn_error();
+
+ *editor = &py_editor;
+ *edit_baton = ret;
+
+ return NULL;
+}
+
+static svn_error_t *py_revfinish_cb(svn_revnum_t revision, void *replay_baton,
+ const svn_delta_editor_t *editor, void *edit_baton,
+ apr_hash_t *rev_props, apr_pool_t *pool)
+{
+ PyObject *cbs = (PyObject *)replay_baton;
+ PyObject *py_finish_fn = PyTuple_GetItem(cbs, 1);
+ PyObject *py_revprops = prop_hash_to_dict(rev_props);
+ PyObject *ret;
+
+ ret = PyObject_CallFunction(py_finish_fn, "lOO", revision, py_revprops, edit_baton);
+ if (ret == NULL)
+ return py_svn_error();
+
+ return NULL;
+}
+
+static PyObject *ra_replay_range(PyObject *self, PyObject *args)
+{
+#if SVN_VER_MAJOR >= 1 && SVN_VER_MINOR >= 5
+ RemoteAccessObject *ra = (RemoteAccessObject *)self;
+ apr_pool_t *temp_pool;
+ svn_revnum_t start_revision, end_revision, low_water_mark;
+ PyObject *cbs;
+ bool send_deltas = true;
+
+ if (!PyArg_ParseTuple(args, "lllOO|b", &start_revision, &end_revision, &low_water_mark, &cbs, &send_deltas))
+ return NULL;
+
+ if (!PyTuple_Check(cbs)) {
+ PyErr_SetString(PyExc_TypeError, "Expected tuple with callbacks");
+ return NULL;
+ }
+
+ if (ra_check_busy(ra))
+ return NULL;
+
+ temp_pool = Pool(NULL);
+ if (temp_pool == NULL)
+ return NULL;
+
+ Py_INCREF(cbs);
+ RUN_RA_WITH_POOL(temp_pool, ra,
+ svn_ra_replay_range(ra->ra, start_revision, end_revision, low_water_mark,
+ send_deltas, py_revstart_cb, py_revfinish_cb, cbs,
+ temp_pool));
+ apr_pool_destroy(temp_pool);
+
+ Py_RETURN_NONE;
+#else
+ PyErr_SetString(PyExc_NotImplementedError, "svn_ra_replay not available with Subversion 1.4");
+ return NULL;
+#endif
+}
+
+
+
static PyObject *ra_rev_proplist(PyObject *self, PyObject *args)
{
apr_pool_t *temp_pool;
@@ -1408,6 +1482,7 @@
{ "get_commit_editor", (PyCFunction)get_commit_editor, METH_VARARGS|METH_KEYWORDS, NULL },
{ "rev_proplist", ra_rev_proplist, METH_VARARGS, NULL },
{ "replay", ra_replay, METH_VARARGS, NULL },
+ { "replay_range", ra_replay_range, METH_VARARGS, NULL },
{ "do_switch", ra_do_switch, METH_VARARGS, NULL },
{ "do_update", ra_do_update, METH_VARARGS, NULL },
{ "get_repos_root", (PyCFunction)ra_get_repos_root, METH_VARARGS|METH_NOARGS, NULL },
More information about the bazaar-commits
mailing list