// Collects all the source files from a single target func collectAllFiles(state *core.BuildState, target *core.BuildTarget, coveragePackages, allFiles map[string]bool, doneTargets map[*core.BuildTarget]bool, includeAllFiles bool) { doneTargets[target] = true if !includeAllFiles && !coveragePackages[target.Label.PackageName] { return } // Small hack here; explore these targets when we don't have any sources yet. Helps languages // like Java where we generate a wrapper target with a complete one immediately underneath. // TODO(pebers): do we still need this now we have Java sourcemaps? if !target.OutputIsComplete || len(allFiles) == 0 { for _, dep := range target.Dependencies() { if !doneTargets[dep] { collectAllFiles(state, dep, coveragePackages, allFiles, doneTargets, includeAllFiles) } } } if target.IsTest { return // Test sources don't count for coverage. } for _, path := range target.AllSourcePaths(state.Graph) { extension := filepath.Ext(path) for _, ext := range state.Config.Cover.FileExtension { if ext == extension { allFiles[path] = target.IsTest || target.TestOnly // Skip test source files from actual coverage display break } } } }
func makeJSONTarget(graph *core.BuildGraph, target *core.BuildTarget) JSONTarget { t := JSONTarget{} for in := range core.IterSources(graph, target) { t.Inputs = append(t.Inputs, in.Src) } for _, out := range target.Outputs() { t.Outputs = append(t.Outputs, path.Join(target.Label.PackageName, out)) } for _, src := range target.AllSourcePaths(graph) { t.Sources = append(t.Sources, src) } for _, dep := range target.Dependencies() { t.Deps = append(t.Deps, dep.Label.String()) } for data := range core.IterRuntimeFiles(graph, target, false) { t.Data = append(t.Data, data.Src) } t.Labels = target.Labels t.Requires = target.Requires rawHash := append(build.RuleHash(target, true, false), core.State.Hashes.Config...) t.Hash = base64.RawStdEncoding.EncodeToString(rawHash) t.Test = target.IsTest t.Binary = target.IsBinary t.TestOnly = target.TestOnly return t }