code: def write_cache(entries, stream, extension_data=None, ShaStreamCls=IndexFileSHA1Writer):
      
      # wrap the stream into a compatible writer
      stream = ShaStreamCls(stream)
  
      tell = stream.tell
      write = stream.write
  
      # header
      version = 2
      write(b"DIRC")
      write(pack(">LL", version, len(entries)))
  
      # body
      for entry in entries:
          beginoffset = tell()
          write(entry[4])         # ctime
          write(entry[5])         # mtime
          path = entry[3]
          path = force_bytes(path, encoding=defenc)
          plen = len(path) & CE_NAMEMASK      # path length
          assert plen == len(path), "Path %s too long to fit into index" % entry[3]
          flags = plen | (entry[2] & CE_NAMEMASK_INV)     # clear possible previous values
          write(pack(">LLLLLL20sH", entry[6], entry[7], entry[0],
                     entry[8], entry[9], entry[10], entry[1], flags))
          write(path)
          real_size = ((tell() - beginoffset + 8) & ~7)
          write(b"\0" * ((beginoffset + real_size) - tell()))
      # END for each entry
  
      # write previously cached extensions data
      if extension_data is not None:
          stream.write(extension_data)
  
      # write the sha over the content
      stream.write_sha()
docs: Write the cache represented by entries to a stream
  
      :param entries: **sorted** list of entries
      :param stream: stream to wrap into the AdapterStreamCls - it is used for
          final output.
  
      :param ShaStreamCls: Type to use when writing to the stream. It produces a sha
          while writing to it, before the data is passed on to the wrapped stream
  
      :param extension_data: any kind of data to write as a trailer, it must begin
          a 4 byte identifier, followed by its size ( 4 bytes )