diff --git a/internal/stage/analyze.go b/internal/stage/analyze.go index 5e8f309..389cdb6 100644 --- a/internal/stage/analyze.go +++ b/internal/stage/analyze.go @@ -345,27 +345,7 @@ func staleAnalyzeDependents( changed string, records map[string]manifest.AnalyzeArtifactRecord, ) { - reverse := make(map[string][]string, len(configured)) - for key, artifactCfg := range configured { - for _, dependency := range normalizedAnalyzeDependencyKeys(artifactCfg.DependsOn) { - reverse[dependency] = append(reverse[dependency], key) - } - } - for key := range reverse { - sort.Strings(reverse[key]) - } - queue := append([]string(nil), reverse[changed]...) - seen := make(map[string]struct{}, len(queue)) - for len(queue) > 0 { - key := queue[0] - queue = queue[1:] - if _, visited := seen[key]; visited { - continue - } - seen[key] = struct{}{} - staleProjectedAnalyzeRecord(records, key) - queue = append(queue, reverse[key]...) - } + staleAnalyzeDependentClosure(configured, changed, records, nil) } func currentAnalyzeArtifactRecord( @@ -445,6 +425,18 @@ func staleUnscheduledAnalyzeDependents( changed string, invocationKeys map[string]struct{}, records map[string]manifest.AnalyzeArtifactRecord, +) { + staleAnalyzeDependentClosure(configured, changed, records, func(key string) bool { + _, evaluated := invocationKeys[key] + return !evaluated + }) +} + +func staleAnalyzeDependentClosure( + configured map[string]config.ScriptoriumArtifactConfig, + changed string, + records map[string]manifest.AnalyzeArtifactRecord, + eligible func(string) bool, ) { reverse := make(map[string][]string, len(configured)) for key, artifactCfg := range configured { @@ -464,7 +456,7 @@ func staleUnscheduledAnalyzeDependents( continue } seen[key] = struct{}{} - if _, evaluated := invocationKeys[key]; evaluated { + if eligible != nil && !eligible(key) { continue } staleProjectedAnalyzeRecord(records, key)