Mercurial > hg-stable
changeset 3335:9061613c1593
Teach bdiff to support buffer objects
manifest.add gives revlog.addrevision a buffer object, which may
be cached and used for a second call in the same session (as mq does
when pushing multiple patches). The other option would be to cast the
buffer to str when caching it.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Wed, 11 Oct 2006 12:06:14 -0700 |
parents | 534806df5b5a |
children | e44eadc92ec4 |
files | mercurial/bdiff.c mercurial/revlog.py |
diffstat | 2 files changed, 8 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bdiff.c Wed Oct 11 12:02:06 2006 -0700 +++ b/mercurial/bdiff.c Wed Oct 11 12:06:14 2006 -0700 @@ -300,18 +300,19 @@ static PyObject *bdiff(PyObject *self, PyObject *args) { - PyObject *sa, *sb, *result = NULL; + char *sa, *sb; + PyObject *result = NULL; struct line *al, *bl; struct hunklist l = {NULL, NULL}; struct hunk *h; char encode[12], *rb; - int an, bn, len = 0, la = 0, lb = 0; + int an, bn, len = 0, la, lb; - if (!PyArg_ParseTuple(args, "SS:bdiff", &sa, &sb)) + if (!PyArg_ParseTuple(args, "t#t#:bdiff", &sa, &la, &sb, &lb)) return NULL; - an = splitlines(PyString_AsString(sa), PyString_Size(sa), &al); - bn = splitlines(PyString_AsString(sb), PyString_Size(sb), &bl); + an = splitlines(sa, la, &al); + bn = splitlines(sb, lb, &bl); if (!al || !bl) goto nomem; @@ -320,6 +321,7 @@ goto nomem; /* calculate length of output */ + la = lb = 0; for (h = l.base; h != l.head; h++) { if (h->a1 != la || h->b1 != lb) len += 12 + bl[h->b1].l - bl[lb].l;
--- a/mercurial/revlog.py Wed Oct 11 12:02:06 2006 -0700 +++ b/mercurial/revlog.py Wed Oct 11 12:06:14 2006 -0700 @@ -973,7 +973,7 @@ end = self.end(t) if not d: prev = self.revision(self.tip()) - d = self.diff(prev, str(text)) + d = self.diff(prev, text) data = compress(d) l = len(data[1]) + len(data[0]) dist = end - start + l