fix: raised error from downloadAll in case of dependency conflict

Signed-off-by: manslaughter03 <manslaughter03@gmail.com>
pull/30974/head
manslaughter03 4 months ago
parent 0a8194c9a3
commit b783de32ad

@ -271,11 +271,11 @@ func (m *Manager) downloadAll(deps []*chart.Dependency) error {
var saveError error
churls := make(map[string]struct{})
for _, dep := range deps {
chartPath := filepath.Join(destPath, dep.Name)
// No repository means the chart is in charts directory
if dep.Repository == "" {
fmt.Fprintf(m.Out, "Dependency %s did not declare a repository. Assuming it exists in the charts directory\n", dep.Name)
// NOTE: we are only validating the local dependency conforms to the constraints. No copying to tmpPath is necessary.
chartPath := filepath.Join(destPath, dep.Name)
ch, err := loader.LoadDir(chartPath)
if err != nil {
return fmt.Errorf("unable to load chart '%s': %v", chartPath, err)
@ -297,6 +297,13 @@ func (m *Manager) downloadAll(deps []*chart.Dependency) error {
}
continue
}
// Check if subchart already exist before downloading tarball.
// https://github.com/helm/helm/issues/30710
if _, err := os.Stat(chartPath); !os.IsNotExist(err) {
return fmt.Errorf("dependency conflict detected: A subchart named '%s' already exists in charts/ directory", dep.Name)
}
if strings.HasPrefix(dep.Repository, "file://") {
if m.Debug {
fmt.Fprintf(m.Out, "Archiving %s from repo %s\n", dep.Name, dep.Repository)

@ -298,6 +298,24 @@ version: 0.1.0`
if err == nil {
t.Fatal("Expected error for bad dependency name")
}
remoteDep := &chart.Dependency{
Name: "sub",
Repository: "oci://remote",
Version: "0.0.1",
}
// create a 'tmpcharts' directory to test #30710
if err := os.MkdirAll(filepath.Join(chartPath, "charts", "sub"), 0755); err != nil {
t.Fatal(err)
}
err = m.downloadAll([]*chart.Dependency{remoteDep})
if err == nil {
t.Fatal("Expected error as subchart already exist")
}
if err.Error() != "dependency conflict detected: A subchart named 'sub' already exists in charts/ directory" {
t.Fatal("Download should failed with conflict issue")
}
}
func TestUpdateBeforeBuild(t *testing.T) {

Loading…
Cancel
Save