Rev 1283: Provide access to new style log functions. in http://people.samba.org/bzr/jelmer/bzr-svn/0.4
Jelmer Vernooij
jelmer at samba.org
Sun Jun 22 23:08:52 BST 2008
At http://people.samba.org/bzr/jelmer/bzr-svn/0.4
------------------------------------------------------------
revno: 1283
revision-id: jelmer at samba.org-20080622220850-rmzes5etysi5bupc
parent: jelmer at samba.org-20080622211849-xj8pqhiot48f9njk
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Mon 2008-06-23 00:08:50 +0200
message:
Provide access to new style log functions.
modified:
client.c client.pyx-20080313235339-wbyjbw2namuiql8f-1
ra.c ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
setup.py setup.py-20060502115218-86950492da22353f
util.c util.c-20080531154025-s8ef6ej9tytsnkkw-1
util.h util.h-20080531154025-s8ef6ej9tytsnkkw-2
wc.c wc.pyx-20080313142018-10l8l23vha2j9e6b-1
=== modified file 'client.c'
--- a/client.c 2008-06-22 06:49:47 +0000
+++ b/client.c 2008-06-22 22:08:50 +0000
@@ -95,7 +95,7 @@
else
copyfrom = Py_None;
- item = Py_BuildValue("(szlOi)",
+ item = Py_BuildValue("(szlNi)",
/* commit_item->path */ "foo",
commit_item->url, commit_item->revision,
copyfrom,
=== modified file 'ra.c'
--- a/ra.c 2008-06-22 21:14:30 +0000
+++ b/ra.c 2008-06-22 22:08:50 +0000
@@ -349,6 +349,8 @@
}
py_window = Py_BuildValue("((LIIiOO))", window->sview_offset, window->sview_len, window->tview_len,
window->src_ops, ops, py_new_data);
+ Py_DECREF(ops);
+ Py_DECREF(py_new_data);
ret = PyObject_CallFunction(fn, "O", py_window);
Py_DECREF(py_window);
if (ret == NULL)
@@ -723,16 +725,17 @@
PyObject *callback, *paths;
svn_revnum_t start = 0, end = 0;
int limit=0;
- bool discover_changed_paths=false, strict_node_history=true;
+ bool discover_changed_paths=false, strict_node_history=true,include_merged_revisions=false;
RemoteAccessObject *ra = (RemoteAccessObject *)self;
PyObject *revprops = Py_None;
apr_pool_t *temp_pool;
apr_array_header_t *apr_paths;
+ apr_array_header_t *apr_revprops;
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOll|ibbO:get_log", kwnames,
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOll|ibbbO:get_log", kwnames,
&callback, &paths, &start, &end, &limit,
&discover_changed_paths, &strict_node_history,
- &revprops))
+ &include_merged_revisions, &revprops))
return NULL;
if (ra_check_busy(ra))
@@ -750,10 +753,53 @@
apr_pool_destroy(temp_pool);
return NULL;
}
+
+#if SVN_VER_MAJOR <= 1 && SVN_VER_MINOR < 5
+ if (revprops == NULL) {
+ PyErr_SetString(PyExc_NotImplementedError, "fetching all revision properties not supported");
+ apr_pool_destroy(temp_pool);
+ return NULL;
+ } else {
+ int i;
+ for (i = 0; i < PyList_Size(revprops); i++) {
+ const char *n = PyString_AsString(PyList_GetItem(revprops, i));
+ if (strcmp(SVN_PROP_REVISION_LOG, n) &&
+ strcmp(SVN_PROP_REVISION_AUTHOR, n) &&
+ strcmp(SVN_PROP_REVISION_DATE, n)) {
+ PyErr_SetString(PyExc_NotImplementedError,
+ "fetching custom revision properties not supported");
+ apr_pool_destroy(temp_pool);
+ return NULL;
+ }
+ }
+ }
+
+ if (include_merged_revisions) {
+ PyErr_SetString(PyExc_NotImplementedError, "include_merged_revisions not supported in Subversion 1.4");
+ apr_pool_destroy(temp_pool);
+ return NULL;
+ }
+#endif
+
+ if (!string_list_to_apr_array(temp_pool, revprops, &apr_revprops)) {
+ apr_pool_destroy(temp_pool);
+ return NULL;
+ }
+
+#if SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 5
+ RUN_RA_WITH_POOL(temp_pool, ra, svn_ra_get_log2(ra->ra,
+ apr_paths, start, end, limit,
+ discover_changed_paths, strict_node_history,
+ include_merged_revisions,
+ apr_revprops,
+ py_svn_log_entry_receiver,
+ callback, temp_pool));
+#else
RUN_RA_WITH_POOL(temp_pool, ra, svn_ra_get_log(ra->ra,
apr_paths, start, end, limit,
discover_changed_paths, strict_node_history, py_svn_log_wrapper,
callback, temp_pool));
+#endif
apr_pool_destroy(temp_pool);
Py_RETURN_NONE;
}
@@ -1063,7 +1109,7 @@
py_props = prop_hash_to_dict(props);
apr_pool_destroy(temp_pool);
- return Py_BuildValue("(OlO)", py_dirents, fetch_rev, py_props);
+ return Py_BuildValue("(NlN)", py_dirents, fetch_rev, py_props);
}
static PyObject *ra_get_lock(PyObject *self, PyObject *args)
@@ -1671,6 +1717,7 @@
}
ret = PyObject_CallFunction(fn, "slOb", realm, failures, py_cert, may_save);
+ Py_DECREF(py_cert);
if (ret == NULL)
return py_svn_error();
=== modified file 'setup.py'
--- a/setup.py 2008-06-22 21:18:49 +0000
+++ b/setup.py 2008-06-22 22:08:50 +0000
@@ -20,7 +20,7 @@
def svn_build_data():
"""Determine the Subversion header file location."""
- basedirs = ["/usr", "/usr/local", "/usr"]
+ basedirs = ["/usr/local", "/usr"]
for basedir in basedirs:
includedir = os.path.join(basedir, "include/subversion-1")
if os.path.isdir(includedir):
=== modified file 'util.c'
--- a/util.c 2008-06-22 21:14:30 +0000
+++ b/util.c 2008-06-22 22:08:50 +0000
@@ -24,6 +24,7 @@
#include <apr_errno.h>
#include <svn_error_codes.h>
#include <svn_config.h>
+#include <svn_version.h>
#include "util.h"
@@ -83,6 +84,11 @@
if (error->apr_err == BZR_SVN_APR_ERROR_OFFSET)
return false; /* Just let Python deal with it */
+ if (error->apr_err == SVN_ERR_RA_NOT_IMPLEMENTED) {
+ PyErr_SetString(PyExc_NotImplementedError, error->message);
+ return false;
+ }
+
PyErr_SetSubversionException(error);
return false;
}
@@ -140,13 +146,13 @@
return py_props;
}
-svn_error_t *py_svn_log_wrapper(void *baton, apr_hash_t *changed_paths, long revision, const char *author, const char *date, const char *message, apr_pool_t *pool)
+static PyObject *pyify_changed_paths(apr_hash_t *changed_paths, apr_pool_t *pool)
{
+ PyObject *py_changed_paths;
apr_hash_index_t *idx;
const char *key;
apr_ssize_t klen;
svn_log_changed_path_t *val;
- PyObject *revprops, *py_changed_paths, *ret;
if (changed_paths == NULL) {
py_changed_paths = Py_None;
@@ -160,6 +166,50 @@
val->copyfrom_rev));
}
}
+
+ return py_changed_paths;
+}
+
+#if SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 5
+svn_error_t *py_svn_log_entry_receiver(void *baton, svn_log_entry_t *log_entry, apr_pool_t *pool)
+{
+ PyObject *revprops, *py_changed_paths, *ret;
+ apr_hash_index_t *idx;
+ const char *key;
+ apr_ssize_t klen;
+ char *val;
+
+ py_changed_paths = pyify_changed_paths(log_entry->changed_paths, pool);
+ if (py_changed_paths == NULL)
+ return py_svn_error();
+
+ revprops = PyDict_New();
+ if (log_entry->revprops != NULL) {
+ for (idx = apr_hash_first(pool, log_entry->revprops); idx != NULL;
+ idx = apr_hash_next(idx)) {
+ apr_hash_this(idx, (const void **)&key, &klen, (void **)&val);
+ PyDict_SetItemString(revprops, key, PyString_FromString(val));
+ }
+ }
+
+ ret = PyObject_CallFunction((PyObject *)baton, "OlOb", py_changed_paths,
+ log_entry->revision, revprops, log_entry->has_children);
+ Py_DECREF(py_changed_paths);
+ Py_DECREF(revprops);
+ if (ret == NULL)
+ return py_svn_error();
+ return NULL;
+}
+#endif
+
+svn_error_t *py_svn_log_wrapper(void *baton, apr_hash_t *changed_paths, long revision, const char *author, const char *date, const char *message, apr_pool_t *pool)
+{
+ PyObject *revprops, *py_changed_paths, *ret;
+
+ py_changed_paths = pyify_changed_paths(changed_paths, pool);
+ if (py_changed_paths == NULL)
+ return py_svn_error();
+
revprops = PyDict_New();
if (message != NULL) {
PyDict_SetItemString(revprops, SVN_PROP_REVISION_LOG,
@@ -173,8 +223,10 @@
PyDict_SetItemString(revprops, SVN_PROP_REVISION_DATE,
PyString_FromString(date));
}
- ret = PyObject_CallFunction((PyObject *)baton, "OlO", py_changed_paths,
- revision, revprops);
+ ret = PyObject_CallFunction((PyObject *)baton, "OlOb", py_changed_paths,
+ revision, revprops, FALSE);
+ Py_DECREF(py_changed_paths);
+ Py_DECREF(revprops);
if (ret == NULL)
return py_svn_error();
return NULL;
=== modified file 'util.h'
--- a/util.h 2008-06-22 21:14:30 +0000
+++ b/util.h 2008-06-22 22:08:50 +0000
@@ -47,6 +47,10 @@
apr_hash_t *config_hash_from_object(PyObject *config, apr_pool_t *pool);
void PyErr_SetAprStatus(apr_status_t status);
+#if SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 5
+svn_error_t *py_svn_log_entry_receiver(void *baton, svn_log_entry_t *log_entry, apr_pool_t *pool);
+#endif
+
#pragma GCC visibility pop
#endif /* _BZR_SVN_UTIL_H_ */
=== modified file 'wc.c'
--- a/wc.c 2008-06-22 08:45:53 +0000
+++ b/wc.c 2008-06-22 22:08:50 +0000
@@ -379,7 +379,7 @@
}
py_orig_props = prop_hash_to_dict(original_props);
apr_pool_destroy(temp_pool);
- return Py_BuildValue("(OO)", py_propchanges, py_orig_props);
+ return Py_BuildValue("(NN)", py_propchanges, py_orig_props);
}
static PyObject *adm_add(PyObject *self, PyObject *args)
More information about the bazaar-commits
mailing list