Merge "Apply "excludes" for OutputFileProducer"

This commit is contained in:
Jooyung Han 2020-07-08 06:40:08 +00:00 committed by Gerrit Code Review
commit ecc495fd09
3 changed files with 30 additions and 22 deletions

View File

@ -2099,15 +2099,6 @@ func (m *moduleContext) CheckbuildFile(srcPath Path) {
m.checkbuildFiles = append(m.checkbuildFiles, srcPath)
}
func findStringInSlice(str string, slice []string) int {
for i, s := range slice {
if s == str {
return i
}
}
return -1
}
// SrcIsModule decodes module references in the format ":name" into the module name, or empty string if the input
// was not a module reference.
func SrcIsModule(s string) (module string) {

View File

@ -380,6 +380,18 @@ func (e missingDependencyError) Error() string {
}
func expandOneSrcPath(ctx ModuleContext, s string, expandedExcludes []string) (Paths, error) {
excludePaths := func(paths Paths) Paths {
if len(expandedExcludes) == 0 {
return paths
}
remainder := make(Paths, 0, len(paths))
for _, p := range paths {
if !InList(p.String(), expandedExcludes) {
remainder = append(remainder, p)
}
}
return remainder
}
if m, t := SrcIsModuleWithTag(s); m != "" {
module := ctx.GetDirectDepWithTag(m, sourceOrOutputDepTag(t))
if module == nil {
@ -390,20 +402,11 @@ func expandOneSrcPath(ctx ModuleContext, s string, expandedExcludes []string) (P
if err != nil {
return nil, fmt.Errorf("path dependency %q: %s", s, err)
}
return outputFiles, nil
return excludePaths(outputFiles), nil
} else if t != "" {
return nil, fmt.Errorf("path dependency %q is not an output file producing module", s)
} else if srcProducer, ok := module.(SourceFileProducer); ok {
moduleSrcs := srcProducer.Srcs()
for _, e := range expandedExcludes {
for j := 0; j < len(moduleSrcs); j++ {
if moduleSrcs[j].String() == e {
moduleSrcs = append(moduleSrcs[:j], moduleSrcs[j+1:]...)
j--
}
}
}
return moduleSrcs, nil
return excludePaths(srcProducer.Srcs()), nil
} else {
return nil, fmt.Errorf("path dependency %q is not a source file producing module", s)
}
@ -418,8 +421,7 @@ func expandOneSrcPath(ctx ModuleContext, s string, expandedExcludes []string) (P
reportPathErrorf(ctx, "module source path %q does not exist", p)
}
j := findStringInSlice(p.String(), expandedExcludes)
if j >= 0 {
if InList(p.String(), expandedExcludes) {
return nil, nil
}
return Paths{p}, nil

View File

@ -1090,6 +1090,21 @@ func TestPathsForModuleSrc(t *testing.T) {
srcs: []string{buildDir + "/.intermediates/ofp/b/gen/c"},
rels: []string{"gen/c"},
},
{
name: "output file provider with exclude",
bp: `
test {
name: "foo",
srcs: [":b", ":c"],
exclude_srcs: [":c"]
}
output_file_provider {
name: "c",
outs: ["gen/c"],
}`,
srcs: []string{buildDir + "/.intermediates/ofp/b/gen/b"},
rels: []string{"gen/b"},
},
{
name: "special characters glob",
bp: `