code: func (d *Downloader) Get(repo vendor.RemoteRepo, branch, tag, revision string) (vendor.WorkingCopy, error) {
  	key := cacheKey{
  		url: repo.URL(), repoType: repo.Type(),
  		branch: branch, tag: tag, revision: revision,
  	}
  	d.wcsMu.Lock()
  	if entry, ok := d.wcs[key]; ok {
  		d.wcsMu.Unlock()
  		entry.wg.Wait()
  		return entry.v, entry.err
  	}
  
  	entry := &cacheEntry{}
  	entry.wg.Add(1)
  	d.wcs[key] = entry
  	d.wcsMu.Unlock()
  
  	entry.v, entry.err = repo.Checkout(branch, tag, revision)
  	entry.wg.Done()
  	return entry.v, entry.err
  }
docs: // Get returns a cached WorkingCopy, or runs RemoteRepo.Checkout