code: def _iter_from_process_or_stream(cls, repo, proc_or_stream):
          
          stream = proc_or_stream
          if not hasattr(stream, 'readline'):
              stream = proc_or_stream.stdout
  
          readline = stream.readline
          while True:
              line = readline()
              if not line:
                  break
              hexsha = line.strip()
              if len(hexsha) > 40:
                  # split additional information, as returned by bisect for instance
                  hexsha, _ = line.split(None, 1)
              # END handle extra info
  
              assert len(hexsha) == 40, "Invalid line: %s" % hexsha
              yield Commit(repo, hex_to_bin(hexsha))
          # END for each line in stream
          # TODO: Review this - it seems process handling got a bit out of control
          # due to many developers trying to fix the open file handles issue
          if hasattr(proc_or_stream, 'wait'):
              finalize_process(proc_or_stream)
docs: Parse out commit information into a list of Commit objects
          We expect one-line per commit, and parse the actual commit information directly
          from our lighting fast object database
  
          :param proc: git-rev-list process instance - one sha per line
          :return: iterator returning Commit objects