Rev 1072: Fix more bugs in the bindings. in file:///data/jelmer/bzr-svn/cext/
Jelmer Vernooij
jelmer at samba.org
Wed Jun 4 16:55:45 BST 2008
At file:///data/jelmer/bzr-svn/cext/
------------------------------------------------------------
revno: 1072
revision-id: jelmer at samba.org-20080604155545-ji33cdrattp969wf
parent: jelmer at samba.org-20080603111510-tzr72q62auor1mm2
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: cext
timestamp: Wed 2008-06-04 17:55:45 +0200
message:
Fix more bugs in the bindings.
modified:
logwalker.py logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
mapping3/__init__.py __init__.py-20080502174630-9324zh25kka98vlw-1
ra.c ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
tests/__init__.py __init__.py-20060508151940-e9f4d914801a2535
transport.py transport.py-20060406231150-b3472d06b3a0818d
util.c util.c-20080531154025-s8ef6ej9tytsnkkw-1
=== modified file 'logwalker.py'
--- a/logwalker.py 2008-06-03 07:43:09 +0000
+++ b/logwalker.py 2008-06-04 15:55:45 +0000
@@ -265,7 +265,6 @@
try:
def update_db(orig_paths, revision, revprops):
- mutter("update db: %r,%r,%r" % (orig_paths, revision, revprops))
assert isinstance(orig_paths, dict) or orig_paths is None
assert isinstance(revision, int)
assert isinstance(revprops, dict)
@@ -302,12 +301,12 @@
def struct_revpaths_to_tuples(changed_paths):
assert isinstance(changed_paths, dict)
revpaths = {}
- for k,v in changed_paths.items():
- if v.copyfrom_path is None:
+ for k,(action, copyfrom_path, copyfrom_rev) in changed_paths.items():
+ if copyfrom_path is None:
copyfrom_path = None
else:
- copyfrom_path = v.copyfrom_path.strip("/")
- revpaths[k.strip("/")] = (v.action, copyfrom_path, v.copyfrom_rev)
+ copyfrom_path = copyfrom_path.strip("/")
+ revpaths[k.strip("/")] = (action, copyfrom_path, copyfrom_rev)
return revpaths
@@ -364,7 +363,7 @@
revprops = lazy_dict(known_revprops, self._transport.revprop_list, revnum)
yield (revpaths, revnum, revprops)
except SubversionException, (_, num):
- if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
+ if num == constants.ERR_FS_NO_SUCH_REVISION:
raise NoSuchRevision(branch=self,
revision="Revision number %d" % from_revnum)
raise
@@ -400,9 +399,9 @@
conn = self._transport.connections.get(self._transport.get_svn_repos_root())
try:
ft = conn.check_path(path, revnum)
- if ft == svn.core.svn_node_file:
+ if ft == core.NODE_FILE:
return []
- assert ft == svn.core.svn_node_dir
+ assert ft == core.NODE_DIR
finally:
self._transport.connections.add(conn)
=== modified file 'mapping3/__init__.py'
--- a/mapping3/__init__.py 2008-05-05 18:23:23 +0000
+++ b/mapping3/__init__.py 2008-06-04 15:55:45 +0000
@@ -22,8 +22,8 @@
guess_scheme_from_history, ListBranchingScheme,
parse_list_scheme_text, NoBranchingScheme,
TrunkBranchingScheme, ListBranchingScheme)
-import sha, svn
-from svn.core import SubversionException
+import sha, core
+import constants
SVN_PROP_BZR_BRANCHING_SCHEME = 'bzr:branching-scheme'
@@ -66,14 +66,15 @@
def get_branches(self, revnum, project=""):
def check_path(path):
- return self.repository.transport.check_path(path, revnum) == svn.core.svn_node_dir
+ return self.repository.transport.check_path(path, revnum) == core.NODE_DIR
def find_children(path):
try:
+ assert not path.startswith("/")
dirents = self.repository.transport.get_dir(path, revnum)[0]
- except SubversionException, (msg, num):
- if num == svn.core.SVN_ERR_FS_NOT_DIRECTORY:
+ except core.SubversionException, (msg, num):
+ if num == constants.ERR_FS_NOT_DIRECTORY:
return None
- if num == svn.core.SVN_ERR_FS_NOT_FOUND:
+ if num == constants.ERR_FS_NOT_FOUND:
return None
raise
return dirents.keys()
@@ -121,7 +122,7 @@
def done(revmetadata, pool):
pass
editor = repository.transport.get_commit_editor(
- {svn.core.SVN_PROP_REVISION_LOG: "Updating branching scheme for Bazaar."},
+ {constants.PROP_REVISION_LOG: "Updating branching scheme for Bazaar."},
done, None, False)
root = editor.open_root(-1)
editor.change_dir_prop(root, SVN_PROP_BZR_BRANCHING_SCHEME,
=== modified file 'ra.c'
--- a/ra.c 2008-06-03 11:15:10 +0000
+++ b/ra.c 2008-06-04 15:55:45 +0000
@@ -190,7 +190,7 @@
}
PyTypeObject Reporter_Type = {
- PyObject_HEAD_INIT(&PyType_Type) 0,
+ PyObject_HEAD_INIT(NULL) 0,
.tp_name = "ra.Reporter",
.tp_methods = reporter_methods,
.tp_dealloc = reporter_dealloc,
@@ -280,7 +280,7 @@
static svn_error_t *py_cb_editor_close_directory(void *dir_baton, apr_pool_t *pool)
{
PyObject *self = (PyObject *)dir_baton, *ret;
- ret = PyObject_CallMethod(self, "close", NULL);
+ ret = PyObject_CallMethod(self, "close", "");
if (ret == NULL)
return py_svn_error();
Py_DECREF(self);
@@ -327,7 +327,7 @@
{
int i;
PyObject *ops, *ret;
- PyObject *fn = (PyObject *)baton;
+ PyObject *fn = (PyObject *)baton, *py_new_data, *py_window;
if (window == NULL) {
/* Signals all delta windows have been received */
Py_DECREF(fn);
@@ -339,16 +339,18 @@
}
ops = PyList_New(window->num_ops);
for (i = 0; i < window->num_ops; i++) {
- PyList_SetItem(ops, i, Py_BuildValue("(ill)", window->ops[i].action_code,
+ PyList_SetItem(ops, i, Py_BuildValue("(iII)", window->ops[i].action_code,
window->ops[i].offset,
window->ops[i].length));
}
- ret = PyObject_CallFunction(fn, "(llllOs#)",
- window->sview_offset,
- window->sview_len,
- window->tview_len,
- window->src_ops, ops,
- window->new_data->data, window->new_data->len);
+ if (window->new_data != NULL) {
+ py_new_data = PyString_FromStringAndSize(window->new_data->data, window->new_data->len);
+ } else {
+ py_new_data = Py_None;
+ }
+ py_window = Py_BuildValue("((LIIiOO))", window->sview_offset, window->sview_len, window->tview_len,
+ window->src_ops, ops, py_new_data);
+ ret = PyObject_CallFunction(fn, "O", py_window);
if (ret == NULL)
return py_svn_error();
return NULL;
@@ -382,7 +384,7 @@
{
PyObject *self = (PyObject *)file_baton, *ret;
if (text_checksum != NULL) {
- ret = PyObject_CallMethod(self, "close", NULL);
+ ret = PyObject_CallMethod(self, "close", "");
} else {
ret = PyObject_CallMethod(self, "close", "s", text_checksum);
}
@@ -404,7 +406,7 @@
static svn_error_t *py_cb_editor_close_edit(void *edit_baton, apr_pool_t *pool)
{
PyObject *self = (PyObject *)edit_baton, *ret;
- ret = PyObject_CallMethod(self, "close", NULL);
+ ret = PyObject_CallMethod(self, "close", "");
if (ret == NULL)
return py_svn_error();
return NULL;
@@ -413,7 +415,7 @@
static svn_error_t *py_cb_editor_abort_edit(void *edit_baton, apr_pool_t *pool)
{
PyObject *self = (PyObject *)edit_baton, *ret;
- ret = PyObject_CallMethod(self, "abort", NULL);
+ ret = PyObject_CallMethod(self, "abort", "");
if (ret == NULL)
return py_svn_error();
return NULL;
@@ -628,7 +630,7 @@
apr_pool_t *temp_pool;
apr_array_header_t *apr_paths;
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOll|ibbO", kwnames,
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOll|ibbO:get_log", kwnames,
&callback, &paths, &start, &end, &limit,
&discover_changed_paths, &strict_node_history,
&revprops))
@@ -644,7 +646,7 @@
/* FIXME: The subversion libraries don't behave as expected,
* so tweak our own parameters a bit. */
apr_paths = apr_array_make(temp_pool, 1, sizeof(char *));
- APR_ARRAY_IDX(apr_paths, 0, char *) = apr_pstrdup(temp_pool, "/");
+ APR_ARRAY_PUSH(apr_paths, char *) = apr_pstrdup(temp_pool, "/");
} else if (!string_list_to_apr_array(temp_pool, paths, &apr_paths)) {
apr_pool_destroy(temp_pool);
return NULL;
=== modified file 'tests/__init__.py'
--- a/tests/__init__.py 2008-06-03 07:43:09 +0000
+++ b/tests/__init__.py 2008-06-04 15:55:45 +0000
@@ -19,15 +19,14 @@
import os
import sys
import bzrlib
-from bzrlib import osutils
+from bzrlib import osutils, urlutils
from bzrlib.bzrdir import BzrDir
from bzrlib.tests import TestCaseInTempDir, TestSkipped
from bzrlib.trace import mutter
-from bzrlib.urlutils import local_path_to_url
from bzrlib.workingtree import WorkingTree
import constants
-import repos, wc, client
+import repos, wc, client, ra
class TestCaseWithSubversionRepository(TestCaseInTempDir):
"""A test case that provides the ability to build Subversion
@@ -59,7 +58,7 @@
open(revprop_hook, 'w').write("#!/bin/sh\n")
os.chmod(revprop_hook, os.stat(revprop_hook).st_mode | 0111)
- return local_path_to_url(abspath)
+ return urlutils.local_path_to_url(abspath)
def make_remote_bzrdir(self, relpath):
"""Create a repository."""
@@ -172,6 +171,32 @@
def client_update(self, path):
self.client_ctx.update([path], None, True)
+ def commit_tree(self, repos_url, changes, revprops={"svn:log": "test commit"}):
+ ret_revnum = None
+ def callback(revmeta):
+ ret_revnum = revmeta.revision
+ x = ra.RemoteAccess(repos_url)
+ editor = x.get_commit_editor(revprops, callback)
+ root = editor.open_root()
+ def process(changes, dir_editor, path):
+ for f, v in changes.items():
+ p = urlutils.join(path, f)
+ if v is None:
+ dir_editor.delete_entry(p)
+ elif isinstance(v, dict):
+ child_editor = dir_editor.add_directory(p)
+ process(v, child_editor)
+ child_editor.close()
+ elif isinstance(f, str):
+ file_editor = dir_editor.add_file(p)
+ # FIXME: send delta
+ file_editor.close()
+ else:
+ raise TypeError("Invalid type for %s" % f)
+ process(changes, root)
+ root.close()
+ return ret_revnum
+
def build_tree(self, files):
"""Create a directory tree.
=== modified file 'transport.py'
--- a/transport.py 2008-06-03 11:15:10 +0000
+++ b/transport.py 2008-06-04 15:55:45 +0000
@@ -237,10 +237,11 @@
from threading import Thread, Semaphore
class logfetcher(Thread):
- def __init__(self, transport, **kwargs):
+ def __init__(self, transport, *args, **kwargs):
Thread.__init__(self)
self.setDaemon(True)
self.transport = transport
+ self.args = args
self.kwargs = kwargs
self.pending = []
self.conn = None
@@ -263,7 +264,7 @@
self.semaphore.release()
self.conn = self.transport.get_connection()
try:
- self.conn.get_log(rcvr, **self.kwargs)
+ self.conn.get_log(callback=rcvr, *self.args, **self.kwargs)
self.pending.append(None)
except Exception, e:
self.pending.append(e)
@@ -274,7 +275,7 @@
else:
newpaths = [self._request_path(path) for path in paths]
- fetcher = logfetcher(self, paths=newpaths, from_revnum=from_revnum, to_revnum=to_revnum, limit=limit, discover_changed_paths=discover_changed_paths, strict_node_history=strict_node_history, revprops=revprops)
+ fetcher = logfetcher(self, paths=newpaths, start=from_revnum, end=to_revnum, limit=limit, discover_changed_paths=discover_changed_paths, strict_node_history=strict_node_history, revprops=revprops)
fetcher.start()
return iter(fetcher.next, None)
=== modified file 'util.c'
--- a/util.c 2008-06-03 07:43:09 +0000
+++ b/util.c 2008-06-04 15:55:45 +0000
@@ -95,7 +95,7 @@
}
*ret = apr_array_make(pool, PyList_Size(l), sizeof(char *));
for (i = 0; i < PyList_GET_SIZE(l); i++) {
- APR_ARRAY_IDX(*ret, i, char *) = apr_pstrdup(pool, PyString_AsString(PyList_GET_ITEM(l, i)));
+ APR_ARRAY_PUSH(*ret, char *) = apr_pstrdup(pool, PyString_AsString(PyList_GET_ITEM(l, i)));
}
return true;
}
@@ -190,7 +190,7 @@
return NULL;
}
for (i = 0; i < PyList_Size(l); i++) {
- APR_ARRAY_IDX(ret, i, svn_revnum_t) = PyLong_AsLong(PyList_GetItem(l, i));
+ APR_ARRAY_PUSH(ret, svn_revnum_t) = PyLong_AsLong(PyList_GetItem(l, i));
}
return ret;
}
More information about the bazaar-commits
mailing list