Rev 1060: Use temporary pools inside client code. in file:///data/jelmer/bzr-svn/cext/
Jelmer Vernooij
jelmer at samba.org
Tue Jun 3 01:23:08 BST 2008
At file:///data/jelmer/bzr-svn/cext/
------------------------------------------------------------
revno: 1060
revision-id: jelmer at samba.org-20080603002305-cjfj5wfuow2vd79d
parent: jelmer at samba.org-20080603000050-n1f02r4345b77nkj
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: cext
timestamp: Tue 2008-06-03 02:23:05 +0200
message:
Use temporary pools inside client code.
modified:
client.c client.pyx-20080313235339-wbyjbw2namuiql8f-1
=== modified file 'client.c'
--- a/client.c 2008-06-03 00:00:50 +0000
+++ b/client.c 2008-06-03 00:23:05 +0000
@@ -115,8 +115,10 @@
ret->pool = Pool();
if (ret->pool == NULL)
return NULL;
- if (!check_error(svn_client_create_context(&ret->client, ret->pool)))
+ if (!check_error(svn_client_create_context(&ret->client, ret->pool))) {
+ apr_pool_destroy(ret->pool);
return NULL;
+ }
return (PyObject *)ret;
}
@@ -127,7 +129,7 @@
Py_DECREF((PyObject *)client->client->log_msg_baton2);
}
apr_pool_destroy(client->pool);
- client->pool = NULL;
+ PyObject_Del(self);
}
static PyObject *client_get_log_msg_func(PyObject *self, void *closure)
@@ -156,14 +158,21 @@
char *path;
ClientObject *client = (ClientObject *)self;
bool recursive=true, force=false, no_ignore=false;
+ apr_pool_t *temp_pool;
char *kwnames[] = { "path", "recursive", "force", "no_ignore", NULL };
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|bbb", kwnames,
&path, &recursive, &force, &no_ignore))
return NULL;
- if (!check_error(svn_client_add3(path, recursive, force, no_ignore,
- client->client, client->pool)))
- return NULL;
+
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+
+ RUN_SVN_WITH_POOL(temp_pool,
+ svn_client_add3(path, recursive, force, no_ignore,
+ client->client, temp_pool));
+ apr_pool_destroy(temp_pool);
return Py_None;
}
@@ -174,6 +183,7 @@
svn_revnum_t result_rev;
svn_opt_revision_t c_peg_rev, c_rev;
char *url, *path;
+ apr_pool_t *temp_pool;
PyObject *peg_rev=Py_None, *rev=Py_None;
bool recurse=true, ignore_externals=false;
@@ -184,10 +194,14 @@
return NULL;
if (!to_opt_revision(rev, &c_rev))
return NULL;
- if (!check_error(svn_client_checkout2(&result_rev, url, path,
+
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_checkout2(&result_rev, url, path,
&c_peg_rev, &c_rev, recurse,
- ignore_externals, client->client, client->pool)))
- return NULL;
+ ignore_externals, client->client, temp_pool));
+ apr_pool_destroy(temp_pool);
return PyLong_FromLong(result_rev);
}
@@ -196,47 +210,70 @@
PyObject *targets;
ClientObject *client = (ClientObject *)self;
bool recurse=true, keep_locks=true;
+ apr_pool_t *temp_pool;
svn_commit_info_t *commit_info = NULL;
+ PyObject *ret;
char *kwnames[] = { "targets", "recurse", "keep_locks", NULL };
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|bb", kwnames, &targets, &recurse, &keep_locks))
return NULL;
- if (!check_error(svn_client_commit3(&commit_info,
- string_list_to_apr_array(client->pool, targets),
- recurse, keep_locks, client->client, client->pool)))
- return NULL;
- return py_commit_info_tuple(commit_info);
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_commit3(&commit_info,
+ string_list_to_apr_array(temp_pool, targets),
+ recurse, keep_locks, client->client, temp_pool));
+ ret = py_commit_info_tuple(commit_info);
+ apr_pool_destroy(temp_pool);
+
+ return ret;
}
static PyObject *client_mkdir(PyObject *self, PyObject *args)
{
PyObject *paths;
svn_commit_info_t *commit_info = NULL;
+ apr_pool_t *temp_pool;
ClientObject *client = (ClientObject *)self;
+ PyObject *ret;
if (!PyArg_ParseTuple(args, "O", &paths))
return NULL;
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
if (!check_error(svn_client_mkdir2(&commit_info,
- string_list_to_apr_array(client->pool, paths),
- client->client, client->pool)))
+ string_list_to_apr_array(temp_pool, paths),
+ client->client, temp_pool)))
return NULL;
- return py_commit_info_tuple(commit_info);
+ ret = py_commit_info_tuple(commit_info);
+ apr_pool_destroy(temp_pool);
+
+ return ret;
}
static PyObject *client_delete(PyObject *self, PyObject *args)
{
PyObject *paths;
bool force=false;
+ apr_pool_t *temp_pool;
svn_commit_info_t *commit_info = NULL;
+ PyObject *ret;
ClientObject *client = (ClientObject *)self;
if (!PyArg_ParseTuple(args, "O|b", &paths, &force))
return NULL;
- if (!check_error(svn_client_delete2(&commit_info,
- string_list_to_apr_array(client->pool, paths),
- force, client->client, client->pool)))
- return NULL;
-
- return py_commit_info_tuple(commit_info);
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_delete2(&commit_info,
+ string_list_to_apr_array(temp_pool, paths),
+ force, client->client, temp_pool));
+
+ ret = py_commit_info_tuple(commit_info);
+
+ apr_pool_destroy(temp_pool);
+
+ return ret;
}
static PyObject *client_copy(PyObject *self, PyObject *args)
@@ -244,16 +281,22 @@
char *src_path, *dst_path;
PyObject *src_rev=Py_None;
svn_commit_info_t *commit_info = NULL;
+ apr_pool_t *temp_pool;
svn_opt_revision_t c_src_rev;
+ PyObject *ret;
ClientObject *client = (ClientObject *)self;
if (!PyArg_ParseTuple(args, "ss|O", &src_path, &dst_path, &src_rev))
return NULL;
if (!to_opt_revision(src_rev, &c_src_rev))
return NULL;
- if (!check_error(svn_client_copy3(&commit_info, src_path,
- &c_src_rev, dst_path, client->client, client->pool)))
- return NULL;
- return py_commit_info_tuple(commit_info);
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_copy3(&commit_info, src_path,
+ &c_src_rev, dst_path, client->client, temp_pool));
+ ret = py_commit_info_tuple(commit_info);
+ apr_pool_destroy(temp_pool);
+ return ret;
}
static PyObject *client_propset(PyObject *self, PyObject *args)
@@ -263,13 +306,17 @@
int recurse = true;
int skip_checks = false;
ClientObject *client = (ClientObject *)self;
+ apr_pool_t *temp_pool;
char *target;
if (!PyArg_ParseTuple(args, "sz#s|bb", &propname, &c_propval.data, &c_propval.len, &target, &recurse, &skip_checks))
return NULL;
- if (!check_error(svn_client_propset2(propname, &c_propval,
- target, recurse, skip_checks, client->client, client->pool)))
- return NULL;
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_propset2(propname, &c_propval,
+ target, recurse, skip_checks, client->client, temp_pool));
+ apr_pool_destroy(temp_pool);
return Py_None;
}
@@ -280,10 +327,12 @@
apr_hash_t *hash_props;
bool recurse = false;
char *propname;
+ apr_pool_t *temp_pool;
char *target;
PyObject *peg_revision;
PyObject *revision;
ClientObject *client = (ClientObject *)self;
+ PyObject *ret;
if (!PyArg_ParseTuple(args, "ssOO|b", &propname, &target, &peg_revision,
&revision, &recurse))
@@ -292,16 +341,22 @@
return NULL;
if (!to_opt_revision(revision, &c_rev))
return NULL;
- if (!check_error(svn_client_propget2(&hash_props, propname, target,
- &c_peg_rev, &c_rev, recurse, client->client, client->pool)))
- return NULL;
- return prop_hash_to_dict(hash_props);
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool,
+ svn_client_propget2(&hash_props, propname, target,
+ &c_peg_rev, &c_rev, recurse, client->client, temp_pool));
+ ret = prop_hash_to_dict(hash_props);
+ apr_pool_destroy(temp_pool);
+ return ret;
}
static PyObject *client_update(PyObject *self, PyObject *args)
{
bool recurse = true;
bool ignore_externals = false;
+ apr_pool_t *temp_pool;
PyObject *rev = Py_None, *paths;
apr_array_header_t *result_revs;
svn_opt_revision_t c_rev;
@@ -315,9 +370,12 @@
if (!to_opt_revision(rev, &c_rev))
return NULL;
- if (!check_error(svn_client_update2(&result_revs,
- string_list_to_apr_array(client->pool, paths), &c_rev,
- recurse, ignore_externals, client->client, client->pool)))
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_update2(&result_revs,
+ string_list_to_apr_array(temp_pool, paths), &c_rev,
+ recurse, ignore_externals, client->client, temp_pool));
return NULL;
ret = PyList_New(result_revs->nelts);
if (ret == NULL)
@@ -327,6 +385,7 @@
if (PyList_SetItem(ret, i, PyLong_FromLong(*ret_rev)) != 0)
return NULL;
}
+ apr_pool_destroy(temp_pool);
return ret;
}
@@ -338,14 +397,20 @@
svn_opt_revision_t c_rev;
svn_string_t *c_val;
ClientObject *client = (ClientObject *)self;
+ apr_pool_t *temp_pool;
+ PyObject *ret;
if (!PyArg_ParseTuple(args, "sssO", &propname, &propval, &url, &rev))
return NULL;
if (!to_opt_revision(rev, &c_rev))
return NULL;
- if (!check_error(svn_client_revprop_get(propname, &c_val, url,
- &c_rev, &set_rev, client->client, client->pool)))
- return NULL;
- return Py_BuildValue("(z#i)", c_val->data, c_val->len, set_rev);
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_revprop_get(propname, &c_val, url,
+ &c_rev, &set_rev, client->client, temp_pool));
+ ret = Py_BuildValue("(z#i)", c_val->data, c_val->len, set_rev);
+ apr_pool_destroy(temp_pool);
+ return ret;
}
static PyObject *client_revprop_set(PyObject *self, PyObject *args)
@@ -356,14 +421,18 @@
char *propname, *url;
svn_revnum_t set_rev;
svn_opt_revision_t c_rev;
+ apr_pool_t *temp_pool;
svn_string_t c_val;
if (!PyArg_ParseTuple(args, "sz#s|Ob", &propname, &c_val.data, &c_val.len, &url, &rev, &force))
return NULL;
if (!to_opt_revision(rev, &c_rev))
return NULL;
- if (!check_error(svn_client_revprop_set(propname, &c_val, url,
- &c_rev, &set_rev, force, client->client, client->pool)))
- return NULL;
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_revprop_set(propname, &c_val, url,
+ &c_rev, &set_rev, force, client->client, temp_pool));
+ apr_pool_destroy(temp_pool);
return PyLong_FromLong(set_rev);
}
@@ -373,6 +442,7 @@
PyObject *targets, *callback, *peg_revision=Py_None, *start=Py_None,
*end=Py_None;
ClientObject *client = (ClientObject *)self;
+ apr_pool_t *temp_pool;
int limit=0;
bool discover_changed_paths=true, strict_node_history=true;
svn_opt_revision_t c_peg_rev, c_start_rev, c_end_rev;
@@ -390,9 +460,12 @@
return NULL;
if (!to_opt_revision(end, &c_end_rev))
return NULL;
- if (!check_error(svn_client_log3(string_list_to_apr_array(client->pool, targets),
- &c_peg_rev, &c_start_rev, &c_end_rev, limit, discover_changed_paths, strict_node_history, py_svn_log_wrapper, callback, client->client, client->pool)))
- return NULL;
+ temp_pool = Pool();
+ if (temp_pool == NULL)
+ return NULL;
+ RUN_SVN_WITH_POOL(temp_pool, svn_client_log3(string_list_to_apr_array(temp_pool, targets),
+ &c_peg_rev, &c_start_rev, &c_end_rev, limit, discover_changed_paths, strict_node_history, py_svn_log_wrapper, callback, client->client, temp_pool));
+ apr_pool_destroy(temp_pool);
return Py_None;
}
More information about the bazaar-commits
mailing list