code: func (b *buildEntity) Save(withMeta bool) (datastore.PropertyMap, error) {
  	var ps datastore.PropertyMap
  	if withMeta {
  		ps = b.GetAllMeta()
  	} else {
  		ps = datastore.PropertyMap{}
  	}
  
  	build := (*buildbot.Build)(b)
  
  	data, err := encode(b)
  	if err != nil {
  		return nil, err
  	}
  	if len(data) > maxDataSize {
  		return nil, errors.Reason("build data is %d bytes, which is more than %d limit", len(data), maxDataSize).
  			Tag(TooBigTag).
  			Err()
  	}
  	ps["data"] = datastore.MkPropertyNI(data)
  	ps["master"] = datastore.MkProperty(b.Master)
  	ps["builder"] = datastore.MkProperty(b.Buildername)
  	ps["number"] = datastore.MkProperty(b.Number)
  	ps["finished"] = datastore.MkProperty(b.Finished)
  	ps["is_experimental"] = datastore.MkProperty(build.Experimental())
  	return ps, nil
  }
docs: // Save converts b to a property map.
  // The encoded build goes into "data" property.
  // In addition, Save returns "master", "builder", "number" and "finished"
  // properties for queries.