code: func revListIndex(atRef string, cache bool, indexMap *indexFileMap) (*StringChannelWrapper, error) {
  	scanner, err := NewDiffIndexScanner(atRef, cache)
  	if err != nil {
  		return nil, err
  	}
  
  	revs := make(chan string, chanBufSize)
  	errs := make(chan error, 1)
  
  	go func() {
  		for scanner.Scan() {
  			var name string = scanner.Entry().DstName
  			if len(name) == 0 {
  				name = scanner.Entry().SrcName
  			}
  
  			indexMap.Add(scanner.Entry().DstSha, &indexFile{
  				Name:    name,
  				SrcName: scanner.Entry().SrcName,
  				Status:  string(scanner.Entry().Status),
  			})
  
  			revs <- scanner.Entry().DstSha
  		}
  
  		if err := scanner.Err(); err != nil {
  			errs <- err
  		}
  
  		close(revs)
  		close(errs)
  	}()
  
  	return NewStringChannelWrapper(revs, errs), nil
  }
docs: // revListIndex uses git diff-index to return the list of object sha1s
  // for in the indexf. It returns a channel from which sha1 strings can be read.
  // The namMap will be filled indexFile pointers mapping sha1s to indexFiles.