code: func (h *Client) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error) {
  	// apply the update options
  	reqOpts := h.opts
  	for _, opt := range opts {
  		opt(&reqOpts)
  	}
  	req := &reqOpts.updateReq
  	req.Chart = chart
  	req.DryRun = reqOpts.dryRun
  	req.Name = rlsName
  	req.DisableHooks = reqOpts.disableHooks
  	req.Recreate = reqOpts.recreate
  	req.Force = reqOpts.force
  	req.ResetValues = reqOpts.resetValues
  	req.ReuseValues = reqOpts.reuseValues
  	ctx := NewContext()
  
  	if reqOpts.before != nil {
  		if err := reqOpts.before(ctx, req); err != nil {
  			return nil, err
  		}
  	}
  	err := chartutil.ProcessRequirementsEnabled(req.Chart, req.Values)
  	if err != nil {
  		return nil, err
  	}
  	err = chartutil.ProcessRequirementsImportValues(req.Chart)
  	if err != nil {
  		return nil, err
  	}
  
  	return h.update(ctx, req)
  }
docs: // UpdateReleaseFromChart updates a release to a new/different chart.