Beispiel #1
0
 def iterobjects(self, get_raw=None):
     """Iterate over the objects in this pack."""
     if get_raw is None:
         get_raw = self.get_raw
     for offset, type, obj, crc32 in self.data.iterobjects():
         assert isinstance(offset, int)
         type, obj = self.data.resolve_object(offset, type, obj, get_raw)
         yield ShaFile.from_raw_chunks(type, obj)
Beispiel #2
0
    def iterentries(self, ext_resolve_ref=None, progress=None):
        """Yield entries summarizing the contents of this pack.

        :param ext_resolve_ref: Optional function to resolve base
            objects (in case this is a thin pack)
        :param progress: Progress function, called with current and
            total object count.

        This will yield tuples with (sha, offset, crc32)
        """
        found = {}
        postponed = defaultdict(list)
        class Postpone(Exception):
            """Raised to postpone delta resolving."""

        def get_ref_text(sha):
            assert len(sha) == 20
            if sha in found:
                return self.get_object_at(found[sha])
            if ext_resolve_ref:
                try:
                    return ext_resolve_ref(sha)
                except KeyError:
                    pass
            raise Postpone, (sha, )
        extra = []
        todo = chain(self.iterobjects(progress=progress), extra)
        for (offset, type, obj, crc32) in todo:
            assert isinstance(offset, int)
            assert isinstance(type, int)
            try:
                type, obj = self.resolve_object(offset, type, obj,
                    get_ref_text)
            except Postpone, (sha, ):
                postponed[sha].append((offset, type, obj))
            else:
                shafile = ShaFile.from_raw_chunks(type, obj)
                sha = shafile.sha().digest()
                found[sha] = offset
                yield sha, offset, crc32
                extra.extend(postponed.get(sha, []))
Beispiel #3
0
 def _do_test_count_blocks_chunks(self, count_blocks):
     blob = ShaFile.from_raw_chunks(Blob.type_num, ['a\nb', '\na\n'])
     self.assertEqual({hash('a\n'): 4, hash('b\n'): 2}, _count_blocks(blob))
Beispiel #4
0
 def _do_test_count_blocks_chunks(self, count_blocks):
     blob = ShaFile.from_raw_chunks(Blob.type_num, ['a\nb', '\na\n'])
     self.assertEqual({hash('a\n'): 4, hash('b\n'): 2}, _count_blocks(blob))
 def _do_test_count_blocks_chunks(self, count_blocks):
     blob = ShaFile.from_raw_chunks(Blob.type_num, [b"a\nb", b"\na\n"])
     self.assertBlockCountEqual({b"a\n": 4, b"b\n": 2}, _count_blocks(blob))
 def _do_test_count_blocks_chunks(self, count_blocks):
     blob = ShaFile.from_raw_chunks(Blob.type_num, [b"a\nb", b"\na\n"])
     self.assertEqual({hash("a\n"): 4, hash("b\n"): 2}, count_blocks(blob))
Beispiel #7
0
 def iterobjects(self):
     """Iterate over the objects in this pack."""
     for offset, type, obj, crc32 in self.data.iterobjects():
         assert isinstance(offset, int)
         yield ShaFile.from_raw_chunks(
           *self.data.resolve_object(offset, type, obj))
 def _do_test_count_blocks_chunks(self, count_blocks):
     blob = ShaFile.from_raw_chunks(Blob.type_num, [b'a\nb', b'\na\n'])
     self.assertBlockCountEqual({b'a\n': 4, b'b\n': 2}, _count_blocks(blob))