def files(self):
        """
        A generator for returning human-readable information about the diffs.

        Generator yields dictionaries that contain filename, name, diff, and
        type.

        ``filename`` is the absolute path to the file that was modified.

        ``name`` is the path of the file relative to the Git repository.

        ``diff`` is a list of ``(line_number, '+'|'-'|' ', line)`` describing
        the changes that occurred between the a_blob and b_blob from the
        commit.

        ``type`` is ``added``, ``deleted``, ``renamed``, ``modified`` and
        describes the overall action that occurred on this file.

        This will skip symlinks and will not provide the contens of binary
        files.
        """
        for diff in self.difflist:
            a_blob = diff.a_blob
            b_blob = diff.b_blob

            a_data = ''
            b_data = ''

            try:
                a_data = a_blob.data_stream.read()
            except (AttributeError, BadObject):
                pass

            try:
                b_data = b_blob.data_stream.read()
            except (__HOLE__, BadObject):
                pass

            if '\0' in a_data or '\0' in b_data:
                # This file is binary? Probably.
                linediff = []
            else:
                linediff = describe_diff(a_data, b_data)

            blob = a_blob or b_blob

            if islink(blob.abspath):
                # Skip symlinks
                continue

            if blob.path.startswith('.jig'):
                # This is a file that is part of .jig, ignore it
                continue

            yield {
                'filename': blob.abspath,
                'name': blob.path,
                'diff': linediff,
                'type': DiffType.for_diff(diff)}
dataset/ETHPy150Open robmadole/jig/src/jig/diffconvert.py/GitDiffIndex.files