From: Jelmer Vernooij Date: Wed, 31 Mar 2010 19:21:45 +0000 (+0200) Subject: Return chunks from apply_delta. X-Git-Tag: rc-walker-ack-v5~27 X-Git-Url: http://git.samba.org/samba.git/?p=jelmer%2Fdulwich-libgit2.git;a=commitdiff_plain;h=a2709f6a4b79afb7ef55b20894925c915b2fbf71 Return chunks from apply_delta. --- diff --git a/dulwich/_pack.c b/dulwich/_pack.c index 2890739..7cdfe30 100644 --- a/dulwich/_pack.c +++ b/dulwich/_pack.c @@ -127,7 +127,7 @@ static PyObject *py_apply_delta(PyObject *self, PyObject *args) return NULL; } - return ret; + return Py_BuildValue("[N]", ret); } static PyObject *py_bisect_find_sha(PyObject *self, PyObject *args) diff --git a/dulwich/pack.py b/dulwich/pack.py index 6174667..2a13e72 100644 --- a/dulwich/pack.py +++ b/dulwich/pack.py @@ -540,7 +540,7 @@ class PackData(object): :return: Tuple with object type and contents. """ if type not in (6, 7): # Not a delta - return type, obj + return type, "".join(obj) if get_offset is None: get_offset = self.get_object_at @@ -561,11 +561,11 @@ class PackData(object): # Can't be a ofs delta, as we wouldn't know the base offset assert type != 6 base_offset = None - type, base_text = self.resolve_object(base_offset, type, base_obj, get_ref) + type, base_text = self.resolve_object(base_offset, type, base_obj, + get_ref) if base_offset is not None: self._offset_cache[base_offset] = type, base_text - ret = (type, apply_delta(base_text, delta)) - return ret + return (type, "".join(apply_delta(base_text, delta))) def iterobjects(self, progress=None): @@ -717,8 +717,7 @@ class PackData(object): "offset was %r" % offset assert offset >= self._header_size self._file.seek(offset) - (type, obj_chunks) = unpack_object(self._file.read)[:2] - return (type, "".join(obj_chunks)) + return unpack_object(self._file.read)[:2] class SHA1Reader(object): @@ -1014,8 +1013,7 @@ def apply_delta(src_buf, delta): if index != delta_length: raise ApplyDeltaError("delta not empty: %r" % delta[index:]) - out = ''.join(out) - if dest_size != len(out): + if dest_size != chunks_length(out): raise ApplyDeltaError("dest size incorrect") return out @@ -1156,7 +1154,7 @@ class Pack(object): get_raw = self.get_raw for offset, type, obj, crc32 in self.data.iterobjects(): assert isinstance(offset, int) - yield ShaFile.from_raw_string( + yield ShaFile.from_raw_chunks( *self.data.resolve_object(offset, type, obj, get_raw)) diff --git a/dulwich/tests/test_pack.py b/dulwich/tests/test_pack.py index 84ac0d3..fb7cba8 100644 --- a/dulwich/tests/test_pack.py +++ b/dulwich/tests/test_pack.py @@ -108,7 +108,7 @@ class TestPackDeltas(unittest.TestCase): test_string_big = "Z" * 8192 def _test_roundtrip(self, base, target): - self.assertEquals(target, + self.assertEquals([target], apply_delta(base, create_delta(base, target))) def test_nochange(self):