Address other comments through Claude Sonnet 4

Signed-off-by: Felipe Santos <felipecassiors@gmail.com>
pull/10096/head
Felipe Santos 3 months ago
parent a6750a0d87
commit 7e68503632

@ -59,35 +59,44 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
locked := make([]*chart.Dependency, len(reqs)) locked := make([]*chart.Dependency, len(reqs))
missing := []string{} missing := []string{}
for i, d := range reqs { for i, d := range reqs {
var constraint *semver.Constraints // Handle local chart dependencies (empty repository)
var chartpath string if d.Repository == "" {
var err error // Local chart subfolder - maintain backward compatibility
if _, err := GetLocalPath(filepath.Join("charts", d.Name), r.chartpath); err != nil {
// If version is defined return nil, err
if d.Version != "" {
constraint, err = semver.NewConstraint(d.Version)
if err != nil {
return nil, fmt.Errorf("dependency %q has an invalid version/constraint format: %w", d.Name, err)
} }
}
// Local chart // For empty repository, determine version from local chart if not specified
if d.Repository == "" || strings.HasPrefix(d.Repository, "file://") { version := d.Version
if d.Repository == "" { if version == "" {
// From charts subfolder chartpath, err := GetLocalPath(filepath.Join("charts", d.Name), r.chartpath)
chartpath, err = GetLocalPath(filepath.Join("charts", d.Name), r.chartpath)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} else {
// From file:// repository ch, err := loader.LoadDir(chartpath)
chartpath, err = GetLocalPath(d.Repository, r.chartpath)
if err != nil { if err != nil {
return nil, err return nil, err
} }
version = ch.Metadata.Version
}
locked[i] = &chart.Dependency{
Name: d.Name,
Repository: "",
Version: version,
}
continue
}
// Handle file:// repository dependencies
if strings.HasPrefix(d.Repository, "file://") {
chartpath, err := GetLocalPath(d.Repository, r.chartpath)
if err != nil {
return nil, err
} }
// Load chart to validate the version
ch, err := loader.LoadDir(chartpath) ch, err := loader.LoadDir(chartpath)
if err != nil { if err != nil {
return nil, err return nil, err
@ -95,16 +104,24 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
v, err := semver.NewVersion(ch.Metadata.Version) v, err := semver.NewVersion(ch.Metadata.Version)
if err != nil { if err != nil {
// If no version specified, add to missing list
if d.Version == "" { if d.Version == "" {
missing = append(missing, fmt.Sprintf("%q (repository %q)", d.Name, d.Repository)) missing = append(missing, fmt.Sprintf("%q (repository %q)", d.Name, d.Repository))
} }
continue continue
} }
// If version is set but does not match the local chart // If version is specified, validate it against the local chart
if d.Version != "" && !constraint.Check(v) { if d.Version != "" {
missing = append(missing, fmt.Sprintf("%q (repository %q, version %q)", d.Name, d.Repository, d.Version)) constraint, err := semver.NewConstraint(d.Version)
continue if err != nil {
return nil, fmt.Errorf("dependency %q has an invalid version/constraint format: %w", d.Name, err)
}
if !constraint.Check(v) {
missing = append(missing, fmt.Sprintf("%q (repository %q, version %q)", d.Name, d.Repository, d.Version))
continue
}
} }
locked[i] = &chart.Dependency{ locked[i] = &chart.Dependency{
@ -115,6 +132,16 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
continue continue
} }
// Handle remote repository dependencies
var constraint *semver.Constraints
if d.Version != "" {
var err error
constraint, err = semver.NewConstraint(d.Version)
if err != nil {
return nil, fmt.Errorf("dependency %q has an invalid version/constraint format: %w", d.Name, err)
}
}
repoName := repoNames[d.Name] repoName := repoNames[d.Name]
// if the repository was not defined, but the dependency defines a repository url, bypass the cache // if the repository was not defined, but the dependency defines a repository url, bypass the cache
if repoName == "" && d.Repository != "" { if repoName == "" && d.Repository != "" {
@ -189,7 +216,7 @@ func (r *Resolver) Resolve(reqs []*chart.Dependency, repoNames map[string]string
// Not a legit entry. // Not a legit entry.
continue continue
} }
if constraint.Check(v) { if constraint == nil || constraint.Check(v) {
found = true found = true
locked[i].Version = v.Original() locked[i].Version = v.Original()
break break

Loading…
Cancel
Save