Rev 1523: Implement do_diff. in http://people.samba.org/bzr/jelmer/bzr-svn/trunk
Jelmer Vernooij
jelmer at samba.org
Sat Aug 2 17:56:02 BST 2008
At http://people.samba.org/bzr/jelmer/bzr-svn/trunk
------------------------------------------------------------
revno: 1523
revision-id: jelmer at samba.org-20080802165559-z10yw204w3m5gz6c
parent: jelmer at samba.org-20080802152048-sjedpv3dlq5oz0zs
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Sat 2008-08-02 18:55:59 +0200
message:
Implement do_diff.
modified:
fileids.py fileids.py-20060714013623-u5iiyqqnko11grcf-1
ra.c ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
tests/test_ra.py test_ra.py-20080313141743-uzsm7ejitrlqone5-1
=== modified file 'fileids.py'
--- a/fileids.py 2008-07-23 20:45:18 +0000
+++ b/fileids.py 2008-08-02 16:55:59 +0000
@@ -279,9 +279,7 @@
for i, revmeta in enumerate(reversed(todo)):
pb.update('generating file id map', i, len(todo))
revid = revmeta.get_revision_id(mapping)
- expensive = False
def log_find_children(path, revnum):
- expensive = True
return self.repos._log.find_children(path, revnum)
(idmap, changes) = self.actual.apply_changes(
@@ -291,14 +289,9 @@
parent_revs = next_parent_revs
- saved = False
- if i % 500 == 0 or expensive:
- self.save(revid, parent_revs, map)
- saved = True
+ self.save(revid, parent_revs, map)
next_parent_revs = [revid]
finally:
pb.finished()
- if not saved:
- self.save(revid, parent_revs, map)
return map
=== modified file 'ra.c'
--- a/ra.c 2008-08-02 11:20:59 +0000
+++ b/ra.c 2008-08-02 16:55:59 +0000
@@ -1056,6 +1056,60 @@
return (PyObject *)ret;
}
+static PyObject *ra_do_diff(PyObject *self, PyObject *args)
+{
+ svn_revnum_t revision_to_update_to;
+ char *diff_target, *versus_url;
+ PyObject *diff_editor;
+ const svn_ra_reporter2_t *reporter;
+ void *report_baton;
+ svn_error_t *err;
+ apr_pool_t *temp_pool;
+ bool ignore_ancestry = false, text_deltas = false, recurse=true;
+ ReporterObject *ret;
+ RemoteAccessObject *ra = (RemoteAccessObject *)self;
+
+ if (!PyArg_ParseTuple(args, "lssO|bbb:do_diff", &revision_to_update_to, &diff_target, &versus_url, &diff_editor, &recurse, &ignore_ancestry, &text_deltas))
+ return NULL;
+
+ if (ra_check_busy(ra))
+ return NULL;
+
+ temp_pool = Pool(NULL);
+ if (temp_pool == NULL)
+ return NULL;
+
+ Py_INCREF(diff_editor);
+ Py_BEGIN_ALLOW_THREADS
+ err = svn_ra_do_diff2(ra->ra, &reporter, &report_baton,
+ revision_to_update_to,
+ diff_target, recurse,
+ ignore_ancestry,
+ text_deltas,
+ versus_url,
+ &py_editor, diff_editor,
+ temp_pool);
+ Py_END_ALLOW_THREADS
+ if (!check_error(err)) {
+ apr_pool_destroy(temp_pool);
+ ra->busy = false;
+
+ return NULL;
+ }
+
+ ret = PyObject_New(ReporterObject, &Reporter_Type);
+ if (ret == NULL)
+ return NULL;
+ ret->reporter = reporter;
+ ret->report_baton = report_baton;
+ ret->pool = temp_pool;
+ Py_INCREF(ra);
+ ret->ra = ra;
+ return (PyObject *)ret;
+}
+
+
+
static PyObject *ra_replay(PyObject *self, PyObject *args)
{
RemoteAccessObject *ra = (RemoteAccessObject *)self;
@@ -1823,6 +1877,7 @@
{ "replay_range", ra_replay_range, METH_VARARGS, NULL },
{ "do_switch", ra_do_switch, METH_VARARGS, NULL },
{ "do_update", ra_do_update, METH_VARARGS, NULL },
+ { "do_diff", ra_do_diff, METH_VARARGS, NULL },
{ "get_repos_root", (PyCFunction)ra_get_repos_root, METH_VARARGS|METH_NOARGS, NULL },
{ "get_log", (PyCFunction)ra_get_log, METH_VARARGS|METH_KEYWORDS, NULL },
{ "get_latest_revnum", (PyCFunction)ra_get_latest_revnum, METH_NOARGS, NULL },
=== modified file 'tests/test_ra.py'
--- a/tests/test_ra.py 2008-06-26 19:34:03 +0000
+++ b/tests/test_ra.py 2008-08-02 16:55:59 +0000
@@ -76,6 +76,28 @@
def test_rev_proplist(self):
self.assertIsInstance(self.ra.rev_proplist(0), dict)
+ def test_do_diff(self):
+ self.do_commit()
+
+ class MyFileEditor:
+ def change_prop(self, name, val): pass
+ def close(self, checksum=None): pass
+
+ class MyDirEditor:
+ def change_prop(self, name, val): pass
+ def add_directory(self, *args): return MyDirEditor()
+ def add_file(self, *args): return MyFileEditor()
+ def close(self): pass
+
+ class MyEditor:
+ def set_target_revision(self, rev): pass
+ def open_root(self, base_rev):
+ return MyDirEditor()
+ def close(self): pass
+ reporter = self.ra.do_diff(1, "", self.ra.get_repos_root(), MyEditor())
+ reporter.set_path("", 0, True)
+ reporter.finish()
+
def test_get_log(self):
returned = []
def cb(*args):
More information about the bazaar-commits
mailing list