code: def patch_stream(self, instream, hunks):
      
  
      # todo: At the moment substituted lineends may not be the same
      #       at the start and at the end of patching. Also issue a
      #       warning/throw about mixed lineends (is it really needed?)
  
      hunks = iter(hunks)
  
      srclineno = 1
  
      lineends = {b'\n':0, b'\r\n':0, b'\r':0}
      def get_line():
        """
        local utility function - return line from source stream
        collecting line end statistics on the way
        """
        line = instream.readline()
          # 'U' mode works only with text files
        if line.endswith(b"\r\n"):
          lineends[b"\r\n"] += 1
        elif line.endswith(b"\n"):
          lineends[b"\n"] += 1
        elif line.endswith(b"\r"):
          lineends[b"\r"] += 1
        return line
  
      for hno, h in enumerate(hunks):
        debug("hunk %d" % (hno+1))
        # skip to line just before hunk starts
        while srclineno < h.startsrc:
          yield get_line()
          srclineno += 1
  
        for hline in h.text:
          # todo: check \ No newline at the end of file
          if hline.startswith(b"-") or hline.startswith(b"\\"):
            get_line()
            srclineno += 1
            continue
          else:
            if not hline.startswith(b"+"):
              get_line()
              srclineno += 1
            line2write = hline[1:]
            # detect if line ends are consistent in source file
            if sum([bool(lineends[x]) for x in lineends]) == 1:
              newline = [x for x in lineends if lineends[x] != 0][0]
              yield line2write.rstrip(b"\r\n")+newline
            else: # newlines are mixed
              yield line2write
  
      for line in instream:
        yield line
docs: Generator that yields stream patched with hunks iterable
  
          Converts lineends in hunk lines to the best suitable format
          autodetected from input