summaryrefslogtreecommitdiff
path: root/subvertpy
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@jelmer.uk>2016-07-24 14:02:32 +0000
committerJelmer Vernooij <jelmer@jelmer.uk>2016-07-24 14:02:32 +0000
commit9c5a327da6b41437b9ae9f5751a035e28c9d2bd7 (patch)
treeb5cdbae6fbc7d0ce2ee5685593eba08eb90b7fb2 /subvertpy
parent8705f6df461e5964994be3086b514844f29f56fd (diff)
Remove some more uses of PyString.
Diffstat (limited to 'subvertpy')
-rw-r--r--subvertpy/_ra.c48
-rw-r--r--subvertpy/repos.c8
-rw-r--r--subvertpy/tests/test_repos.py2
-rw-r--r--subvertpy/util.c43
4 files changed, 57 insertions, 44 deletions
diff --git a/subvertpy/_ra.c b/subvertpy/_ra.c
index 917bfee6..75ecb2c1 100644
--- a/subvertpy/_ra.c
+++ b/subvertpy/_ra.c
@@ -519,8 +519,14 @@ static svn_error_t *py_open_tmp_file(apr_file_t **fp, void *callback,
CB_CHECK_PYRETVAL(ret);
- if (PyString_Check(ret)) {
- char* fname = PyString_AsString(ret);
+ if (PyUnicode_Check(ret)) {
+ PyObject *orig_ret = ret;
+ ret = PyUnicode_AsUTF8String(ret);
+ Py_DECREF(orig_ret);
+ }
+
+ if (PyBytes_Check(ret)) {
+ char* fname = PyBytes_AsString(ret);
status = apr_file_open(fp, fname, APR_CREATE | APR_READ | APR_WRITE, APR_OS_DEFAULT,
pool);
if (status) {
@@ -1525,7 +1531,7 @@ static PyObject *ra_get_dir(PyObject *self, PyObject *args, PyObject *kwargs)
pykey = Py_None;
Py_INCREF(pykey);
} else {
- pykey = PyString_FromString((char *)key);
+ pykey = PyUnicode_FromString((char *)key);
}
if (PyDict_SetItem(py_dirents, pykey, item) != 0) {
Py_DECREF(item);
@@ -1741,7 +1747,17 @@ static PyObject *ra_unlock(PyObject *self, PyObject *args)
PyErr_SetString(PyExc_TypeError, "token not bytes");
goto fail_dict;
}
- apr_hash_set(hash_path_tokens, PyBytes_AsString(k), PyBytes_Size(k), (char *)PyString_AsString(v));
+ if (PyUnicode_Check(v)) {
+ v = PyUnicode_AsUTF8String(v);
+ } else {
+ Py_INCREF(v);
+ }
+ if (!PyBytes_Check(v)) {
+ PyErr_SetString(PyExc_TypeError, "path not bytestring or unicode string");
+ goto fail_dict;
+ }
+
+ apr_hash_set(hash_path_tokens, PyBytes_AsString(k), PyBytes_Size(k), (char *)PyBytes_AsString(v));
}
RUN_RA_WITH_POOL(temp_pool, ra, svn_ra_unlock(ra->ra, hash_path_tokens, break_lock,
py_lock_func, lock_func, temp_pool));
@@ -2979,32 +2995,20 @@ static PyObject *get_ssl_server_trust_prompt_provider(PyObject *self, PyObject *
static svn_error_t *py_ssl_client_cert_pw_prompt(svn_auth_cred_ssl_client_cert_pw_t **cred, void *baton, const char *realm, svn_boolean_t may_save, apr_pool_t *pool)
{
- PyObject *fn = (PyObject *)baton, *ret, *py_may_save, *py_password;
+ PyObject *fn = (PyObject *)baton, *ret, *py_password;
PyGILState_STATE state = PyGILState_Ensure();
ret = PyObject_CallFunction(fn, "sb", realm, may_save);
CB_CHECK_PYRETVAL(ret);
- if (!PyTuple_Check(ret)) {
- PyErr_SetString(PyExc_TypeError, "expected tuple with client cert pw credentials");
+ if (!PyArg_ParseTuple(ret, "Ob", &py_password, &may_save)) {
goto fail;
}
- if (PyTuple_Size(ret) != 2) {
- PyErr_SetString(PyExc_TypeError, "expected tuple of size 2");
- goto fail;
- }
- py_may_save = PyTuple_GetItem(ret, 1);
- if (!PyBool_Check(py_may_save)) {
- PyErr_SetString(PyExc_TypeError, "may_save should be boolean");
- goto fail;
- }
- py_password = PyTuple_GetItem(ret, 0);
- if (!PyString_Check(py_password)) {
- PyErr_SetString(PyExc_TypeError, "password should be string");
- goto fail;
- }
*cred = apr_pcalloc(pool, sizeof(**cred));
(*cred)->password = py_object_to_svn_string(py_password, pool);
- (*cred)->may_save = (py_may_save == Py_True);
+ if ((*cred)->password == NULL) {
+ goto fail;
+ }
+ (*cred)->may_save = may_save;
Py_DECREF(ret);
PyGILState_Release(state);
return NULL;
diff --git a/subvertpy/repos.c b/subvertpy/repos.c
index f281465c..eb40d756 100644
--- a/subvertpy/repos.c
+++ b/subvertpy/repos.c
@@ -165,7 +165,7 @@ static PyObject *fs_get_uuid(PyObject *self)
if (temp_pool == NULL)
return NULL;
RUN_SVN_WITH_POOL(temp_pool, svn_fs_get_uuid(fsobj->fs, &uuid, temp_pool));
- ret = PyString_FromString(uuid);
+ ret = PyUnicode_FromString(uuid);
apr_pool_destroy(temp_pool);
return ret;
@@ -607,7 +607,7 @@ static PyObject *py_string_from_svn_node_id(const svn_fs_id_t *id)
apr_pool_destroy(temp_pool);
return NULL;
}
- return PyString_FromStringAndSize(str->data, str->len);
+ return PyBytes_FromStringAndSize(str->data, str->len);
}
#if ONLY_BEFORE_SVN(1, 6)
@@ -812,7 +812,7 @@ static PyObject *fs_root_file_checksum(FileSystemRootObject *self, PyObject *arg
ret = Py_None;
Py_INCREF(ret);
} else {
- ret = PyString_FromString(cstr);
+ ret = PyUnicode_FromString(cstr);
}
#else
if (kind > 0) {
@@ -823,7 +823,7 @@ static PyObject *fs_root_file_checksum(FileSystemRootObject *self, PyObject *arg
RUN_SVN_WITH_POOL(temp_pool, svn_fs_file_md5_checksum(checksum,
self->root,
path, temp_pool));
- ret = PyString_FromStringAndSize((char *)checksum, APR_MD5_DIGESTSIZE);
+ ret = PyBytes_FromStringAndSize((char *)checksum, APR_MD5_DIGESTSIZE);
#endif
apr_pool_destroy(temp_pool);
return ret;
diff --git a/subvertpy/tests/test_repos.py b/subvertpy/tests/test_repos.py
index f77c5eb0..21a0f4f1 100644
--- a/subvertpy/tests/test_repos.py
+++ b/subvertpy/tests/test_repos.py
@@ -62,7 +62,7 @@ class TestRepository(TestCaseInTempDir):
def test_uuid(self):
repos.create(os.path.join(self.test_dir, "foo"))
- self.assertIsInstance(repos.Repository("foo").fs().get_uuid(), str)
+ self.assertEqual(36, len(repos.Repository("foo").fs().get_uuid()))
def test_youngest_rev(self):
repos.create(os.path.join(self.test_dir, "foo"))
diff --git a/subvertpy/util.c b/subvertpy/util.c
index 7ba20b55..9203a9e2 100644
--- a/subvertpy/util.c
+++ b/subvertpy/util.c
@@ -402,7 +402,7 @@ PyObject *prop_hash_to_dict(apr_hash_t *props)
py_val = Py_None;
Py_INCREF(py_val);
} else {
- py_val = PyString_FromStringAndSize(val->data, val->len);
+ py_val = PyBytes_FromStringAndSize(val->data, val->len);
}
if (py_val == NULL) {
goto fail_item;
@@ -453,22 +453,31 @@ apr_hash_t *prop_dict_to_hash(apr_pool_t *pool, PyObject *py_props)
}
while (PyDict_Next(py_props, &idx, &k, &v)) {
+ if (PyUnicode_Check(k)) {
+ k = PyUnicode_AsUTF8String(k);
+ } else {
+ Py_INCREF(k);
+ }
- if (!PyString_Check(k)) {
+ if (!PyBytes_Check(k)) {
PyErr_SetString(PyExc_TypeError,
- "property name should be string");
+ "property name should be unicode or byte string");
+ Py_DECREF(k);
return NULL;
}
- if (!PyString_Check(v)) {
+
+ if (!PyBytes_Check(v)) {
PyErr_SetString(PyExc_TypeError,
- "property value should be string");
+ "property value should be byte string");
+ Py_DECREF(k);
return NULL;
}
- val_string = svn_string_ncreate(PyString_AsString(v),
- PyString_Size(v), pool);
- apr_hash_set(hash_props, PyString_AsString(k),
- PyString_Size(k), val_string);
+ val_string = svn_string_ncreate(PyBytes_AsString(v),
+ PyBytes_Size(v), pool);
+ apr_hash_set(hash_props, PyBytes_AsString(k),
+ PyBytes_Size(k), val_string);
+ Py_DECREF(k);
}
return hash_props;
@@ -593,22 +602,22 @@ PyObject **py_changed_paths, PyObject **revprops)
goto fail_dict;
}
if (message != NULL) {
- obj = PyString_FromString(message);
+ obj = PyBytes_FromString(message);
PyDict_SetItemString(*revprops, SVN_PROP_REVISION_LOG, obj);
Py_DECREF(obj);
}
if (author != NULL) {
- obj = PyString_FromString(author);
+ obj = PyBytes_FromString(author);
PyDict_SetItemString(*revprops, SVN_PROP_REVISION_AUTHOR, obj);
Py_DECREF(obj);
}
if (date != NULL) {
- obj = PyString_FromString(date);
+ obj = PyBytes_FromString(date);
PyDict_SetItemString(*revprops, SVN_PROP_REVISION_DATE, obj);
Py_DECREF(obj);
}
return true;
-
+
fail_dict:
Py_DECREF(*py_changed_paths);
fail:
@@ -838,7 +847,7 @@ PyObject *py_dirent(const svn_dirent_t *dirent, int dirent_fields)
}
if (dirent_fields & SVN_DIRENT_LAST_AUTHOR) {
if (dirent->last_author != NULL) {
- obj = PyString_FromString(dirent->last_author);
+ obj = PyBytes_FromString(dirent->last_author);
} else {
obj = Py_None;
Py_INCREF(obj);
@@ -948,7 +957,7 @@ static PyObject *stream_read_full(StreamObject *self, PyObject *args)
return NULL;
if (self->closed) {
- return PyString_FromString("");
+ return PyBytes_FromString("");
}
temp_pool = Pool(NULL);
@@ -968,7 +977,7 @@ static PyObject *stream_read_full(StreamObject *self, PyObject *args)
#else
RUN_SVN_WITH_POOL(temp_pool, svn_stream_read(self->stream, buffer, &size));
#endif
- ret = PyString_FromStringAndSize(buffer, size);
+ ret = PyBytes_FromStringAndSize(buffer, size);
apr_pool_destroy(temp_pool);
return ret;
} else {
@@ -979,7 +988,7 @@ static PyObject *stream_read_full(StreamObject *self, PyObject *args)
temp_pool,
temp_pool));
self->closed = TRUE;
- ret = PyString_FromStringAndSize(result->data, result->len);
+ ret = PyBytes_FromStringAndSize(result->data, result->len);
apr_pool_destroy(temp_pool);
return ret;
#else