// resolveCharmURL returns a resolved charm URL, given a charm location string. // If the series is not resolved, the environment default-series is used, or if // not set, the series is resolved with the state server. func resolveCharmURL(url string, client *api.Client, conf *config.Config) (*charm.URL, error) { ref, err := charm.ParseReference(url) if err != nil { return nil, err } // If series is not set, use configured default series if ref.Series == "" { if defaultSeries, ok := conf.DefaultSeries(); ok { ref.Series = defaultSeries } } if ref.Series != "" { return ref.URL("") } // Otherwise, look up the best supported series for this charm if ref.Schema != "local" { return client.ResolveCharm(ref) } possibleURL := *ref possibleURL.Series = "precise" logger.Errorf("The series is not specified in the environment (default-series) or with the charm. Did you mean:\n\t%s", &possibleURL) return nil, fmt.Errorf("cannot resolve series for charm: %q", ref) }