From 6a66e3d01ed17fcdb7ce4b5022639c0f7442bbfb Mon Sep 17 00:00:00 2001 From: Zi Wang Date: Tue, 13 Jun 2023 10:40:52 -0700 Subject: [PATCH] Support multiple filters in zipsync Also applied this feature to kotlinc since it needs both java and kt files. Test: local test and presubmits Bug: 287071909 Change-Id: I28c725b03115aef47055448cb75412980015da15 --- cmd/zipsync/zipsync.go | 37 ++++++++++++++++++++++++++++++++++--- java/kotlin.go | 2 +- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/cmd/zipsync/zipsync.go b/cmd/zipsync/zipsync.go index aecdc3de4..b3e78d088 100644 --- a/cmd/zipsync/zipsync.go +++ b/cmd/zipsync/zipsync.go @@ -29,10 +29,14 @@ import ( var ( outputDir = flag.String("d", "", "output dir") outputFile = flag.String("l", "", "output list file") - filter = flag.String("f", "", "optional filter pattern") zipPrefix = flag.String("zip-prefix", "", "optional prefix within the zip file to extract, stripping the prefix") + filter multiFlag ) +func init() { + flag.Var(&filter, "f", "optional filter pattern") +} + func must(err error) { if err != nil { log.Fatal(err) @@ -107,13 +111,15 @@ func main() { } name = strings.TrimPrefix(name, *zipPrefix) } - if *filter != "" { - if match, err := filepath.Match(*filter, filepath.Base(name)); err != nil { + + if filter != nil { + if match, err := filter.Match(filepath.Base(name)); err != nil { log.Fatal(err) } else if !match { continue } } + if filepath.IsAbs(name) { log.Fatalf("%q in %q is an absolute path", name, input) } @@ -151,3 +157,28 @@ func main() { must(ioutil.WriteFile(*outputFile, []byte(data), 0666)) } } + +type multiFlag []string + +func (m *multiFlag) String() string { + return strings.Join(*m, " ") +} + +func (m *multiFlag) Set(s string) error { + *m = append(*m, s) + return nil +} + +func (m *multiFlag) Match(s string) (bool, error) { + if m == nil { + return false, nil + } + for _, f := range *m { + if match, err := filepath.Match(f, s); err != nil { + return false, err + } else if match { + return true, nil + } + } + return false, nil +} diff --git a/java/kotlin.go b/java/kotlin.go index 9bff5ea01..f28d6c737 100644 --- a/java/kotlin.go +++ b/java/kotlin.go @@ -30,7 +30,7 @@ var kotlinc = pctx.AndroidRemoteStaticRule("kotlinc", android.RemoteRuleSupports blueprint.RuleParams{ Command: `rm -rf "$classesDir" "$headerClassesDir" "$srcJarDir" "$kotlinBuildFile" "$emptyDir" && ` + `mkdir -p "$classesDir" "$headerClassesDir" "$srcJarDir" "$emptyDir" && ` + - `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` + + `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" -f "*.kt" $srcJars && ` + `${config.GenKotlinBuildFileCmd} --classpath "$classpath" --name "$name"` + ` --out_dir "$classesDir" --srcs "$out.rsp" --srcs "$srcJarDir/list"` + ` $commonSrcFilesArg --out "$kotlinBuildFile" && ` +