diff --git a/pkg/downloader/chart_downloader.go b/pkg/downloader/chart_downloader.go index b8d4ba00a..3df704ac2 100644 --- a/pkg/downloader/chart_downloader.go +++ b/pkg/downloader/chart_downloader.go @@ -346,9 +346,14 @@ func (c *ChartDownloader) DownloadToCache(ref, version string) (string, *provena // // TODO: support OCI hash func (c *ChartDownloader) ResolveChartVersion(ref, version string) (string, *url.URL, error) { - u, err := c.parseChartURL(ref, version) + u, err := url.Parse(ref) if err != nil { - return "", u, err + return "", nil, err + } + + u, err = c.appendTagToUrlIfNeeded(u, version) + if err != nil { + return "", nil, err } if registry.IsOCI(u.String()) { @@ -577,27 +582,24 @@ func (c *ChartDownloader) getChartName(url string) string { return name } -func (c *ChartDownloader) parseChartURL(ref string, version string) (*url.URL, error) { - u, err := url.Parse(ref) - if err != nil { - return nil, fmt.Errorf("invalid chart URL format: %s", ref) +func (c *ChartDownloader) appendTagToUrlIfNeeded(chartUrl *url.URL, version string) (*url.URL, error) { + if !registry.IsOCI(chartUrl.String()) { + return chartUrl, nil } - if registry.IsOCI(u.String()) { - refAlreadyHasTagOrDigest := strings.Contains(u.Path, ":") || strings.Contains(u.Path, "@") - if refAlreadyHasTagOrDigest { - return u, nil - } - - tag, err := c.getOciTag(ref, version) - if err != nil { - return nil, err - } + refAlreadyHasTagOrDigest := strings.Contains(chartUrl.Path, ":") || strings.Contains(chartUrl.Path, "@") + if refAlreadyHasTagOrDigest { + return chartUrl, nil + } - u.Path = fmt.Sprintf("%s:%s", u.Path, tag) + tag, err := c.getOciTag(chartUrl.String(), version) + if err != nil { + return nil, err } - return u, nil + chartUrl.Path = fmt.Sprintf("%s:%s", chartUrl.Path, tag) + + return chartUrl, nil } func (c *ChartDownloader) getOciTag(ref, version string) (string, error) { diff --git a/pkg/downloader/manager.go b/pkg/downloader/manager.go index 34c696c6a..026a9e487 100644 --- a/pkg/downloader/manager.go +++ b/pkg/downloader/manager.go @@ -359,8 +359,12 @@ func (m *Manager) downloadAll(deps []*chart.Dependency) error { } if m.SkipDownloadIfExists { - u, err := dl.parseChartURL(churl, version) + u, err := url.Parse(churl) + if err != nil { + return err + } + u, err = dl.appendTagToUrlIfNeeded(u, version) if err != nil { return err }