code: func walkSource(source builder.Source, origPath string) ([]string, error) {
  	fp, err := remotecontext.FullPath(source, origPath)
  	if err != nil {
  		return nil, err
  	}
  	// Must be a dir
  	var subfiles []string
  	err = source.Root().Walk(fp, func(path string, info os.FileInfo, err error) error {
  		if err != nil {
  			return err
  		}
  		rel, err := remotecontext.Rel(source.Root(), path)
  		if err != nil {
  			return err
  		}
  		if rel == "." {
  			return nil
  		}
  		hash, err := source.Hash(rel)
  		if err != nil {
  			return nil
  		}
  		// we already checked handleHash above
  		subfiles = append(subfiles, hash)
  		return nil
  	})
  	if err != nil {
  		return nil, err
  	}
  
  	sort.Strings(subfiles)
  	return subfiles, nil
  }
docs: // TODO: dedupe with copyWithWildcards()