summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Zi Wang <mrziwang@google.com> 2023-06-13 10:40:52 -0700
committer Zi Wang <mrziwang@google.com> 2023-06-14 06:44:49 +0000
commit6a66e3d01ed17fcdb7ce4b5022639c0f7442bbfb (patch)
tree77481cd01c84082bd3d1adfe1af6d8bde8e33695
parent722a2b50c65e9d476271b75c413057ca0fef346b (diff)
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
-rw-r--r--cmd/zipsync/zipsync.go37
-rw-r--r--java/kotlin.go2
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" && ` +