Rev 1076: Simplify C code in a couple of places, fix busy handling. in file:///data/jelmer/bzr-svn/cext/
Jelmer Vernooij
jelmer at samba.org
Wed Jun 4 22:20:42 BST 2008
At file:///data/jelmer/bzr-svn/cext/
------------------------------------------------------------
revno: 1076
revision-id: jelmer at samba.org-20080604212042-2v93z80f0oh3vrpt
parent: jelmer at samba.org-20080604205519-t9a8098tq8g2cvwk
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: cext
timestamp: Wed 2008-06-04 23:20:42 +0200
message:
Simplify C code in a couple of places, fix busy handling.
modified:
core.c core.pyx-20080313210413-17k59slolpfe5kdq-1
editor.c editor.c-20080602191336-frj7az1sdk13o1tw-1
editor.h editor.h-20080602191336-frj7az1sdk13o1tw-2
ra.c ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
util.c util.c-20080531154025-s8ef6ej9tytsnkkw-1
wc.c wc.pyx-20080313142018-10l8l23vha2j9e6b-1
=== modified file 'core.c'
--- a/core.c 2008-06-03 05:32:05 +0000
+++ b/core.c 2008-06-04 21:20:42 +0000
@@ -131,10 +131,10 @@
if (mod == NULL)
return;
- PyModule_AddObject(mod, "NODE_DIR", PyInt_FromLong(svn_node_dir));
- PyModule_AddObject(mod, "NODE_FILE", PyInt_FromLong(svn_node_file));
- PyModule_AddObject(mod, "NODE_UNKNOWN", PyInt_FromLong(svn_node_unknown));
- PyModule_AddObject(mod, "NODE_NONE", PyInt_FromLong(svn_node_none));
+ PyModule_AddIntConstant(mod, "NODE_DIR", svn_node_dir);
+ PyModule_AddIntConstant(mod, "NODE_FILE", svn_node_file);
+ PyModule_AddIntConstant(mod, "NODE_UNKNOWN", svn_node_unknown);
+ PyModule_AddIntConstant(mod, "NODE_NONE", svn_node_none);
PyModule_AddObject(mod, "SubversionException",
PyErr_NewException("core.SubversionException", NULL, NULL));
=== modified file 'editor.c'
--- a/editor.c 2008-06-04 20:55:19 +0000
+++ b/editor.c 2008-06-04 21:20:42 +0000
@@ -56,6 +56,7 @@
PyObject_HEAD_INIT(&PyType_Type) 0,
.tp_name = "ra.TxDeltaWindowHandler",
.tp_call = NULL, /* FIXME */
+ .tp_dealloc = (destructor)PyObject_Del
};
static PyObject *py_file_editor_apply_textdelta(PyObject *self, PyObject *args)
@@ -65,6 +66,12 @@
svn_txdelta_window_handler_t txdelta_handler;
void *txdelta_baton;
TxDeltaWindowHandlerObject *py_txdelta;
+
+ if (!FileEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "|z", &c_base_checksum))
return NULL;
if (!check_error(editor->editor->apply_textdelta(editor->baton,
@@ -82,6 +89,12 @@
EditorObject *editor = (EditorObject *)self;
char *name;
svn_string_t c_value;
+
+ if (!FileEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "sz#", &name, &c_value.data, &c_value.len))
return NULL;
if (!check_error(editor->editor->change_file_prop(editor->baton, name,
@@ -94,6 +107,12 @@
{
EditorObject *editor = (EditorObject *)self;
char *c_checksum = NULL;
+
+ if (!FileEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "|z", &c_checksum))
return NULL;
if (!check_error(editor->editor->close_file(editor->baton, c_checksum,
@@ -113,7 +132,7 @@
PyObject_HEAD_INIT(&PyType_Type) 0,
.tp_name = "ra.FileEditor",
.tp_methods = py_file_editor_methods,
- .tp_dealloc = PyObject_Del,
+ .tp_dealloc = (destructor)PyObject_Del,
};
static PyObject *py_dir_editor_delete_entry(PyObject *self, PyObject *args)
@@ -122,6 +141,11 @@
char *path;
svn_revnum_t revision = -1;
+ if (!DirectoryEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "s|l", &path, &revision))
return NULL;
@@ -140,6 +164,11 @@
void *child_baton;
EditorObject *editor = (EditorObject *)self;
+ if (!DirectoryEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "s|zl", &path, ©from_path, ©from_rev))
return NULL;
@@ -157,6 +186,12 @@
EditorObject *editor = (EditorObject *)self;
int base_revision=-1;
void *child_baton;
+
+ if (!DirectoryEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "s|l", &path, &base_revision))
return NULL;
@@ -174,6 +209,11 @@
svn_string_t c_value, *p_c_value;
EditorObject *editor = (EditorObject *)self;
+ if (!DirectoryEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "sz#", &name, &c_value.data, &c_value.len))
return NULL;
@@ -189,6 +229,12 @@
static PyObject *py_dir_editor_close(PyObject *self)
{
EditorObject *editor = (EditorObject *)self;
+
+ if (!DirectoryEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!check_error(editor->editor->close_directory(editor->baton,
editor->pool)))
return NULL;
@@ -201,6 +247,12 @@
char *path;
EditorObject *editor = (EditorObject *)self;
+ if (!Editor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
+
if (!PyArg_ParseTuple(args, "s", &path))
return NULL;
@@ -218,6 +270,11 @@
void *file_baton;
EditorObject *editor = (EditorObject *)self;
+ if (!DirectoryEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "s|zl", &path, ©_path, ©_rev))
return NULL;
@@ -236,6 +293,11 @@
void *file_baton;
EditorObject *editor = (EditorObject *)self;
+ if (!DirectoryEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "s|l", &path, &base_revision))
return NULL;
@@ -251,6 +313,12 @@
{
char *path;
EditorObject *editor = (EditorObject *)self;
+
+ if (!DirectoryEditor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "s", &path))
return NULL;
@@ -278,13 +346,19 @@
PyObject_HEAD_INIT(&PyType_Type) 0,
.tp_name = "ra.DirEditor",
.tp_methods = py_dir_editor_methods,
- .tp_dealloc = PyObject_Del,
+ .tp_dealloc = (destructor)PyObject_Del,
};
static PyObject *py_editor_set_target_revision(PyObject *self, PyObject *args)
{
int target_revision;
EditorObject *editor = (EditorObject *)self;
+
+ if (!Editor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "i", &target_revision))
return NULL;
@@ -301,6 +375,11 @@
void *root_baton;
EditorObject *editor = (EditorObject *)self;
+ if (!Editor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!PyArg_ParseTuple(args, "|i", &base_revision))
return NULL;
@@ -315,6 +394,12 @@
static PyObject *py_editor_close(PyObject *self)
{
EditorObject *editor = (EditorObject *)self;
+
+ if (!Editor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!check_error(editor->editor->close_edit(editor->baton, editor->pool)))
return NULL;
@@ -328,6 +413,11 @@
{
EditorObject *editor = (EditorObject *)self;
+ if (!Editor_Check(self)) {
+ PyErr_BadArgument();
+ return NULL;
+ }
+
if (!check_error(editor->editor->abort_edit(editor->baton, editor->pool)))
return NULL;
=== modified file 'editor.h'
--- a/editor.h 2008-06-04 20:55:19 +0000
+++ b/editor.h 2008-06-04 21:20:42 +0000
@@ -28,6 +28,11 @@
PyAPI_DATA(PyTypeObject) TxDeltaWindowHandler_Type;
PyObject *new_editor_object(const svn_delta_editor_t *editor, void *baton, apr_pool_t *pool, PyTypeObject *type, bool *busy_var);
+#define DirectoryEditor_Check(op) PyObject_TypeCheck(op, &DirectoryEditor_Type)
+#define FileEditor_Check(op) PyObject_TypeCheck(op, &FileEditor_Type)
+#define Editor_Check(op) PyObject_TypeCheck(op, &Editor_Type)
+#define TxDeltaWindowHandler_Check(op) PyObject_TypeCheck(op, &TxDeltaWindowHandler_Type)
+
typedef struct {
PyObject_HEAD
svn_txdelta_window_handler_t txdelta_handler;
=== modified file 'ra.c'
--- a/ra.c 2008-06-04 20:55:19 +0000
+++ b/ra.c 2008-06-04 21:20:42 +0000
@@ -349,7 +349,7 @@
window->ops[i].offset,
window->ops[i].length));
}
- if (window->new_data != NULL) {
+ if (window->new_data != NULL && window->new_data->data != NULL) {
py_new_data = PyString_FromStringAndSize(window->new_data->data, window->new_data->len);
} else {
py_new_data = Py_None;
@@ -489,6 +489,7 @@
PyErr_SetString(busy_exc, "Remote access object already in use");
return true;
}
+ raobj->busy = true;
return false;
}
@@ -833,7 +834,7 @@
NULL };
PyObject *revprops, *commit_callback, *lock_tokens = Py_None;
bool keep_locks = false;
- apr_pool_t *temp_pool;
+ apr_pool_t *temp_pool, *pool;
const svn_delta_editor_t *editor;
void *edit_baton;
RemoteAccessObject *ra = (RemoteAccessObject *)self;
@@ -866,11 +867,14 @@
return NULL;
}
+ pool = Pool();
+
RUN_SVN_WITH_POOL(temp_pool, svn_ra_get_commit_editor2(ra->ra, &editor,
&edit_baton,
PyString_AsString(PyDict_GetItemString(revprops, SVN_PROP_REVISION_LOG)), py_commit_callback,
- commit_callback, hash_lock_tokens, keep_locks, temp_pool));
- return new_editor_object(editor, edit_baton, temp_pool,
+ commit_callback, hash_lock_tokens, keep_locks, pool));
+ apr_pool_destroy(temp_pool);
+ return new_editor_object(editor, edit_baton, pool,
&Editor_Type, &ra->busy);
}
=== modified file 'util.c'
--- a/util.c 2008-06-04 20:55:19 +0000
+++ b/util.c 2008-06-04 21:20:42 +0000
@@ -117,9 +117,13 @@
py_props = PyDict_New();
for (idx = apr_hash_first(pool, props); idx != NULL;
idx = apr_hash_next(idx)) {
+ PyObject *py_val;
apr_hash_this(idx, (const void **)&key, &klen, (void **)&val);
- PyDict_SetItemString(py_props, key,
- PyString_FromStringAndSize(val->data, val->len));
+ if (val == NULL || val->data == NULL)
+ py_val = Py_None;
+ else
+ py_val = PyString_FromStringAndSize(val->data, val->len);
+ PyDict_SetItemString(py_props, key, py_val);
}
apr_pool_destroy(pool);
return py_props;
=== modified file 'wc.c'
--- a/wc.c 2008-06-04 20:55:19 +0000
+++ b/wc.c 2008-06-04 21:20:42 +0000
@@ -236,7 +236,7 @@
if (temp_pool == NULL)
return NULL;
RUN_SVN_WITH_POOL(temp_pool, svn_wc_prop_get(&value, name, path, admobj->adm, temp_pool));
- if (value == NULL) {
+ if (value == NULL || value->data == NULL) {
ret = Py_None;
} else {
ret = PyString_FromStringAndSize(value->data, value->len);
@@ -350,10 +350,6 @@
apr_array_header_t *propchanges;
apr_hash_t *original_props;
AdmObject *admobj = (AdmObject *)self;
- apr_hash_index_t *idx;
- svn_string_t *string;
- const char *key;
- apr_ssize_t klen;
svn_prop_t *el;
int i;
PyObject *py_propchanges, *py_orig_props;
@@ -372,13 +368,7 @@
PyList_SetItem(py_propchanges, i,
Py_BuildValue("(ss#)", el->name, el->value->data, el->value->len));
}
- py_orig_props = PyDict_New();
- idx = apr_hash_first(temp_pool, original_props);
- while (idx != NULL) {
- apr_hash_this(idx, (const void **)&key, &klen, (void **)&string);
- PyDict_SetItemString(py_orig_props, key, PyString_FromStringAndSize(string->data, string->len));
- idx = apr_hash_next(idx);
- }
+ py_orig_props = prop_hash_to_dict(original_props);
apr_pool_destroy(temp_pool);
return Py_BuildValue("(OO)", py_propchanges, py_orig_props);
}
@@ -755,10 +745,10 @@
if (mod == NULL)
return;
- PyModule_AddObject(mod, "SCHEDULE_NORMAL", PyLong_FromLong(0));
- PyModule_AddObject(mod, "SCHEDULE_ADD", PyLong_FromLong(1));
- PyModule_AddObject(mod, "SCHEDULE_DELETE", PyLong_FromLong(2));
- PyModule_AddObject(mod, "SCHEDULE_REPLACE", PyLong_FromLong(3));
+ PyModule_AddIntConstant(mod, "SCHEDULE_NORMAL", 0);
+ PyModule_AddIntConstant(mod, "SCHEDULE_ADD", 1);
+ PyModule_AddIntConstant(mod, "SCHEDULE_DELETE", 2);
+ PyModule_AddIntConstant(mod, "SCHEDULE_REPLACE", 3);
PyModule_AddObject(mod, "WorkingCopy", (PyObject *)&Adm_Type);
Py_INCREF(&Adm_Type);
More information about the bazaar-commits
mailing list