فهرست منبع

Return chunks from apply_delta.

Jelmer Vernooij 15 سال پیش
والد
کامیت
a6a722e85b
3فایلهای تغییر یافته به همراه9 افزوده شده و 11 حذف شده
  1. 1 1
      dulwich/_pack.c
  2. 7 9
      dulwich/pack.py
  3. 1 1
      dulwich/tests/test_pack.py

+ 1 - 1
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)

+ 7 - 9
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))
 
 

+ 1 - 1
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):