]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: recognize android suffix when constructing build list
authorJay Conrod <jayconrod@google.com>
Tue, 19 Mar 2019 20:36:21 +0000 (16:36 -0400)
committerJay Conrod <jayconrod@google.com>
Thu, 28 Mar 2019 23:36:30 +0000 (23:36 +0000)
cmd/go/internal/imports.ScanDir extracts a list of imports from a
directory. It's used instead of go/build.ImportDir when constructing
the build list. GOOS and GOARCH may be used to filter files.

With this change, imports.MatchFile understands that when the
"android" tag is set, the "linux" tag is implied.

Fixes #30888

Change-Id: Ia29bd1590b69c9183ab14a879d5fc1b639f8eaef
Reviewed-on: https://go-review.googlesource.com/c/go/+/168378
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
17 files changed:
src/cmd/go/internal/imports/build.go
src/cmd/go/internal/imports/scan_test.go
src/cmd/go/internal/imports/testdata/android/a_android.go [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/android/b_android_arm64.go [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/android/c_linux.go [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/android/d_linux_arm64.go [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/android/e.go [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/android/f.go [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/android/g.go [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/android/tags.txt [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/android/want.txt [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/star/tags.txt [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/star/want.txt [new file with mode: 0644]
src/cmd/go/internal/imports/testdata/star/x.go [moved from src/cmd/go/internal/imports/testdata/import1/x.go with 100% similarity]
src/cmd/go/internal/imports/testdata/star/x1.go [moved from src/cmd/go/internal/imports/testdata/import1/x1.go with 100% similarity]
src/cmd/go/internal/imports/testdata/star/x_darwin.go [moved from src/cmd/go/internal/imports/testdata/import1/x_darwin.go with 100% similarity]
src/cmd/go/internal/imports/testdata/star/x_windows.go [moved from src/cmd/go/internal/imports/testdata/import1/x_windows.go with 100% similarity]

index ddf425b0204dcf6885ef7bd33a91d49f536040b4..3718dbba3cd8d2699c947a277e52f86cc763307e 100644 (file)
@@ -184,13 +184,13 @@ func MatchFile(name string, tags map[string]bool) bool {
        }
        n := len(l)
        if n >= 2 && KnownOS[l[n-2]] && KnownArch[l[n-1]] {
-               return tags[l[n-2]] && tags[l[n-1]]
+               return matchTag(l[n-2], tags, true) && matchTag(l[n-1], tags, true)
        }
        if n >= 1 && KnownOS[l[n-1]] {
-               return tags[l[n-1]]
+               return matchTag(l[n-1], tags, true)
        }
        if n >= 1 && KnownArch[l[n-1]] {
-               return tags[l[n-1]]
+               return matchTag(l[n-1], tags, true)
        }
        return true
 }
index 6a2ff62ba758936089e2e1cf7fe6e9756a2a49b9..e424656cae2ebd4a0262b7c75166bd95cfcb0221 100644 (file)
@@ -5,10 +5,13 @@
 package imports
 
 import (
+       "bytes"
        "internal/testenv"
+       "io/ioutil"
+       "path"
        "path/filepath"
-       "reflect"
        "runtime"
+       "strings"
        "testing"
 )
 
@@ -51,17 +54,41 @@ func TestScan(t *testing.T) {
                t.Errorf("json missing test import net/http (%q)", testImports)
        }
 }
-
-func TestScanStar(t *testing.T) {
+func TestScanDir(t *testing.T) {
        testenv.MustHaveGoBuild(t)
 
-       imports, _, err := ScanDir("testdata/import1", map[string]bool{"*": true})
+       dirs, err := ioutil.ReadDir("testdata")
        if err != nil {
                t.Fatal(err)
        }
+       for _, dir := range dirs {
+               if !dir.IsDir() || strings.HasPrefix(dir.Name(), ".") {
+                       continue
+               }
+               t.Run(dir.Name(), func(t *testing.T) {
+                       tagsData, err := ioutil.ReadFile(filepath.Join("testdata", dir.Name(), "tags.txt"))
+                       if err != nil {
+                               t.Fatalf("error reading tags: %v", err)
+                       }
+                       tags := make(map[string]bool)
+                       for _, t := range strings.Fields(string(tagsData)) {
+                               tags[t] = true
+                       }
+
+                       wantData, err := ioutil.ReadFile(filepath.Join("testdata", dir.Name(), "want.txt"))
+                       if err != nil {
+                               t.Fatalf("error reading want: %v", err)
+                       }
+                       want := string(bytes.TrimSpace(wantData))
 
-       want := []string{"import1", "import2", "import3", "import4"}
-       if !reflect.DeepEqual(imports, want) {
-               t.Errorf("ScanDir testdata/import1:\nhave %v\nwant %v", imports, want)
+                       imports, _, err := ScanDir(path.Join("testdata", dir.Name()), tags)
+                       if err != nil {
+                               t.Fatal(err)
+                       }
+                       got := strings.Join(imports, "\n")
+                       if got != want {
+                               t.Errorf("ScanDir: got imports:\n%s\n\nwant:\n%s", got, want)
+                       }
+               })
        }
 }
diff --git a/src/cmd/go/internal/imports/testdata/android/a_android.go b/src/cmd/go/internal/imports/testdata/android/a_android.go
new file mode 100644 (file)
index 0000000..2ed972e
--- /dev/null
@@ -0,0 +1,3 @@
+package android
+
+import _ "a"
diff --git a/src/cmd/go/internal/imports/testdata/android/b_android_arm64.go b/src/cmd/go/internal/imports/testdata/android/b_android_arm64.go
new file mode 100644 (file)
index 0000000..ee9c312
--- /dev/null
@@ -0,0 +1,3 @@
+package android
+
+import _ "b"
diff --git a/src/cmd/go/internal/imports/testdata/android/c_linux.go b/src/cmd/go/internal/imports/testdata/android/c_linux.go
new file mode 100644 (file)
index 0000000..91624ce
--- /dev/null
@@ -0,0 +1,3 @@
+package android
+
+import _ "c"
diff --git a/src/cmd/go/internal/imports/testdata/android/d_linux_arm64.go b/src/cmd/go/internal/imports/testdata/android/d_linux_arm64.go
new file mode 100644 (file)
index 0000000..34e07df
--- /dev/null
@@ -0,0 +1,3 @@
+package android
+
+import _ "d"
diff --git a/src/cmd/go/internal/imports/testdata/android/e.go b/src/cmd/go/internal/imports/testdata/android/e.go
new file mode 100644 (file)
index 0000000..d9b2db7
--- /dev/null
@@ -0,0 +1,5 @@
+// +build android
+
+package android
+
+import _ "e"
diff --git a/src/cmd/go/internal/imports/testdata/android/f.go b/src/cmd/go/internal/imports/testdata/android/f.go
new file mode 100644 (file)
index 0000000..281e4dd
--- /dev/null
@@ -0,0 +1,5 @@
+// +build linux
+
+package android
+
+import _ "f"
diff --git a/src/cmd/go/internal/imports/testdata/android/g.go b/src/cmd/go/internal/imports/testdata/android/g.go
new file mode 100644 (file)
index 0000000..66a789c
--- /dev/null
@@ -0,0 +1,5 @@
+// +build !android
+
+package android
+
+import _ "g"
diff --git a/src/cmd/go/internal/imports/testdata/android/tags.txt b/src/cmd/go/internal/imports/testdata/android/tags.txt
new file mode 100644 (file)
index 0000000..aaf5a6b
--- /dev/null
@@ -0,0 +1 @@
+android arm64
\ No newline at end of file
diff --git a/src/cmd/go/internal/imports/testdata/android/want.txt b/src/cmd/go/internal/imports/testdata/android/want.txt
new file mode 100644 (file)
index 0000000..0fdf397
--- /dev/null
@@ -0,0 +1,6 @@
+a
+b
+c
+d
+e
+f
diff --git a/src/cmd/go/internal/imports/testdata/star/tags.txt b/src/cmd/go/internal/imports/testdata/star/tags.txt
new file mode 100644 (file)
index 0000000..f59ec20
--- /dev/null
@@ -0,0 +1 @@
+*
\ No newline at end of file
diff --git a/src/cmd/go/internal/imports/testdata/star/want.txt b/src/cmd/go/internal/imports/testdata/star/want.txt
new file mode 100644 (file)
index 0000000..139f5f4
--- /dev/null
@@ -0,0 +1,4 @@
+import1
+import2
+import3
+import4