code: func (n *roFileVersionsDir) populate(ctx context.Context) error {
  	n.mu.Lock()
  	defer n.mu.Unlock()
  
  	// Things never change here, so if we've ever populated, we're
  	// populated.
  	if n.children != nil {
  		return nil
  	}
  
  	Logger.Printf("roFileVersionsDir.populate(%q)", n.fullPath())
  	res, err := n.fs.client.GetClaims(ctx, &search.ClaimsRequest{n.permanode, "camliContent"})
  	if err != nil {
  		return errors.New("error while getting claims")
  	}
  
  	n.children = make(map[string]roFileOrDir)
  	for _, cl := range res.Claims {
  		pn, ok := blob.Parse(cl.Value)
  		if !ok {
  			return errors.New("invalid blobref")
  		}
  		res, err := n.fs.client.Describe(ctx, &search.DescribeRequest{
  			BlobRef: pn, // this is camliContent
  			Depth:   1,
  			At:      cl.Date,
  		})
  		if err != nil {
  			return errors.New("blobref not described")
  		}
  		db := res.Meta[cl.Value]
  		if db == nil {
  			return errors.New("blobref not described")
  		}
  		name := cl.Date.String()
  		n.children[name] = &roFileVersion{
  			fs:        n.fs,
  			permanode: n.permanode,
  			parent:    n,
  			name:      name,
  			content:   db.BlobRef,
  			size:      db.File.Size,
  			mtime:     cl.Date.Time(),
  		}
  
  	}
  	return nil
  }
docs: // populate hits the blobstore to populate map of child nodes.