mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-18 17:32:50 +02:00
fix: include-needs should only include direct dependencies, not transitive
- Fix collectDirectNeedsOnly to correctly match needs by full ID - Fix PlanReleases to respect SelectedReleases when provided - Fix unmarkNeedsDirectOnly to use full release IDs - Update tests to expect correct behavior for include-needs vs include-transitive-needs - Add SkipNeeds flag when needs are pre-included in withNeeds This fixes CI issues in PR #2485 Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
+20
-9
@@ -3053,10 +3053,24 @@ func unmarkNeedsDirectOnly(filteredReleases []Release) {
|
||||
|
||||
func collectDirectNeedsOnly(filteredReleases []Release) map[string]struct{} {
|
||||
directNeeds := map[string]struct{}{}
|
||||
nameToID := map[string]string{}
|
||||
for _, r := range filteredReleases {
|
||||
nameToID[r.Name] = ReleaseToID(&r.ReleaseSpec)
|
||||
}
|
||||
for _, r := range filteredReleases {
|
||||
if !r.Filtered {
|
||||
for _, id := range r.ReleaseSpec.Needs {
|
||||
directNeeds[id] = struct{}{}
|
||||
for _, need := range r.ReleaseSpec.Needs {
|
||||
if fullID, ok := nameToID[need]; ok {
|
||||
directNeeds[fullID] = struct{}{}
|
||||
} else {
|
||||
parts := strings.Split(need, "/")
|
||||
needName := parts[len(parts)-1]
|
||||
if fullID, ok := nameToID[needName]; ok {
|
||||
directNeeds[fullID] = struct{}{}
|
||||
} else {
|
||||
directNeeds[need] = struct{}{}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3064,13 +3078,10 @@ func collectDirectNeedsOnly(filteredReleases []Release) map[string]struct{} {
|
||||
}
|
||||
|
||||
func unmarkReleasesByNeedID(toUnmark map[string]struct{}, releases []Release) {
|
||||
for needID := range toUnmark {
|
||||
parts := strings.Split(needID, "/")
|
||||
needName := parts[len(parts)-1]
|
||||
for i, r := range releases {
|
||||
if r.Name == needName {
|
||||
releases[i].Filtered = false
|
||||
}
|
||||
for i := range releases {
|
||||
releaseID := ReleaseToID(&releases[i].ReleaseSpec)
|
||||
if _, ok := toUnmark[releaseID]; ok {
|
||||
releases[i].Filtered = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,6 +104,19 @@ func (st *HelmState) PlanReleases(opts PlanOptions) ([][]Release, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// If SelectedReleases is provided, mark those releases as not filtered
|
||||
if len(opts.SelectedReleases) > 0 {
|
||||
selectedIDs := make(map[string]struct{})
|
||||
for _, r := range opts.SelectedReleases {
|
||||
selectedIDs[ReleaseToID(&r)] = struct{}{}
|
||||
}
|
||||
for i := range marked {
|
||||
if _, ok := selectedIDs[ReleaseToID(&marked[i].ReleaseSpec)]; ok {
|
||||
marked[i].Filtered = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
groups, err := SortedReleaseGroups(marked, opts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user