code: func (f *clsFlag) retrieveCL(ctx context.Context, cl string, httpClient *http.Client, requirePatchset bool) (*pb.GerritChange, error) {
  	ret, err := parseCL(cl)
  	switch {
  	case err != nil:
  		return nil, err
  	case requirePatchset && ret.Patchset == 0:
  		return nil, fmt.Errorf("missing patchset number")
  	case ret.Project != "" && ret.Patchset != 0:
  		return ret, nil
  	}
  
  	// Fetch CL info from Gerrit.
  	client, err := gerrit.NewRESTClient(httpClient, ret.Host, true)
  	if err != nil {
  		return nil, err
  	}
  	change, err := client.GetChange(ctx, &gerritpb.GetChangeRequest{
  		Number:  ret.Change,
  		Options: []gerritpb.QueryOption{gerritpb.QueryOption_CURRENT_REVISION},
  	})
  	if err != nil {
  		return nil, fmt.Errorf("failed to fetch CL %d from %q: %s", ret.Change, ret.Host, err)
  	}
  
  	ret.Project = change.Project
  	if ret.Patchset == 0 {
  		ret.Patchset = int64(change.Revisions[change.CurrentRevision].Number)
  	}
  	return ret, nil
  }
docs: // retrieveCL retrieves a GerritChange from a string.
  // Makes a Gerrit RPC if necessary.