From 8ee6f32fb3bc1a983259aac09e4dfad49fb37fb1 Mon Sep 17 00:00:00 2001 From: hxzhao527 Date: Tue, 8 Jan 2019 09:11:24 +0800 Subject: [PATCH 1/5] cmd/go: fix go get with ... fails in module mode --- src/cmd/go/internal/modload/import.go | 37 ++++++++++++++++++++------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/cmd/go/internal/modload/import.go b/src/cmd/go/internal/modload/import.go index 3210e16c25b084..52b22397b8bbae 100644 --- a/src/cmd/go/internal/modload/import.go +++ b/src/cmd/go/internal/modload/import.go @@ -252,18 +252,37 @@ func dirInModule(path, mpath, mdir string, isLocal bool) (dir string, haveGoFile // We don't care about build tags, not even "+build ignore". // We're just looking for a plausible directory. haveGoFiles = haveGoFilesCache.Do(dir, func() interface{} { - f, err := os.Open(dir) + if strings.HasSuffix(dir, "/...") { + dir = strings.TrimSuffix(dir, "/...") + var have bool + _ = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() { + // ignore dir + return nil + } + if filepath.Ext(info.Name()) == ".go" && info.Mode().IsRegular() { + have = true + return errors.New("just to terminate walk") + } + return nil + }) + return have + } + pattern := filepath.Join(dir, "*.go") + goFiles, err := filepath.Glob(pattern) if err != nil { return false } - defer f.Close() - names, _ := f.Readdirnames(-1) - for _, name := range names { - if strings.HasSuffix(name, ".go") { - info, err := os.Stat(filepath.Join(dir, name)) - if err == nil && info.Mode().IsRegular() { - return true - } + for _, fullPath := range goFiles { + info, err := os.Stat(fullPath) + if err != nil { + return false + } + if info.Mode().IsRegular() { + return true } } return false From ec931ff19efe70f7c3f59abbed7cc7a9931215a5 Mon Sep 17 00:00:00 2001 From: hxzhao527 Date: Tue, 8 Jan 2019 12:03:17 +0800 Subject: [PATCH 2/5] add test --- src/cmd/go/internal/modload/query_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/cmd/go/internal/modload/query_test.go b/src/cmd/go/internal/modload/query_test.go index 9b07383217175c..8cc5230341bffc 100644 --- a/src/cmd/go/internal/modload/query_test.go +++ b/src/cmd/go/internal/modload/query_test.go @@ -149,3 +149,20 @@ func TestQuery(t *testing.T) { }) } } + +var( + queryPackagePath = "github.com/google/codesearch/cmd/..." + queryPackageQuery = "latest" +) +func TestQueryPackage(t *testing.T) { + m, _, err := QueryPackage(queryPackagePath, queryPackageQuery, Allowed) + if err != nil{ + t.Error(err) + } + if m.Version != "v1.1.0"{ + t.Errorf("queryPackage get wrong info: %s, expect: %s",m.Version, "v1.1.0" ) + } + if m.Path != "github.com/google/codesearch"{ + t.Errorf("queryPackage get wrong path: %s, expect: %s",m.Path, "github.com/google/codesearch" ) + } +} \ No newline at end of file From 2fa1ed802817460711c7342be89a3ff22b0305fd Mon Sep 17 00:00:00 2001 From: hxzhao527 Date: Tue, 8 Jan 2019 13:13:38 +0800 Subject: [PATCH 3/5] add more test --- src/cmd/go/internal/modload/query_test.go | 66 ++++++++++++++++++----- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/src/cmd/go/internal/modload/query_test.go b/src/cmd/go/internal/modload/query_test.go index 8cc5230341bffc..abe8e53f39fcec 100644 --- a/src/cmd/go/internal/modload/query_test.go +++ b/src/cmd/go/internal/modload/query_test.go @@ -150,19 +150,61 @@ func TestQuery(t *testing.T) { } } -var( - queryPackagePath = "github.com/google/codesearch/cmd/..." - queryPackageQuery = "latest" +var ( + _queryPackage = []struct { + path string + query string + err string + realPath string + version string + }{ + { + path: "github.com/google/codesearch/cmd/...", + query: "latest", + err: "", + realPath: "github.com/google/codesearch", + version: "v1.1.0", + }, + { + path: "github.com/google/codesearch/cmd", + query: "latest", + err: `no matching versions for query "latest"`, + realPath: "github.com/google/codesearch", + version: "v1.1.0", + }, + { + path: "github.com/google/codesearch/...", + query: "latest", + err: ``, + realPath: "github.com/google/codesearch", + version: "v1.1.0", + }, + { + path: "github.com/google/codesearch", + query: "latest", + err: `invalid github.com/ import path "github.com/google"`, + realPath: "github.com/google/codesearch", + version: "v1.1.0", + }, + } ) + func TestQueryPackage(t *testing.T) { - m, _, err := QueryPackage(queryPackagePath, queryPackageQuery, Allowed) - if err != nil{ - t.Error(err) - } - if m.Version != "v1.1.0"{ - t.Errorf("queryPackage get wrong info: %s, expect: %s",m.Version, "v1.1.0" ) - } - if m.Path != "github.com/google/codesearch"{ - t.Errorf("queryPackage get wrong path: %s, expect: %s",m.Path, "github.com/google/codesearch" ) + for _, tt := range _queryPackage { + t.Run(strings.Replace(tt.path, "/", "_", -1)+"@"+tt.query, func(t *testing.T) { + m, _, err := QueryPackage(tt.path, tt.query, Allowed) + if err != nil { + if err.Error() != tt.err { + t.Errorf("queryPackage %s get wrong err: %s, expect: %s", tt.path, err, tt.err) + } + return + } + if m.Version != tt.version { + t.Errorf("queryPackage get wrong info: %s, expect: %s", m.Version, tt.version) + } + if m.Path != tt.realPath { + t.Errorf("queryPackage get wrong path: %s, expect: %s", m.Path, tt.realPath) + } + }) } } \ No newline at end of file From f2dd48bc5c9d2305def3e30e92ed2cce54888391 Mon Sep 17 00:00:00 2001 From: hxzhao527 Date: Tue, 8 Jan 2019 13:28:17 +0800 Subject: [PATCH 4/5] add more test --- src/cmd/go/internal/modload/query_test.go | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/cmd/go/internal/modload/query_test.go b/src/cmd/go/internal/modload/query_test.go index abe8e53f39fcec..4b59a146f94324 100644 --- a/src/cmd/go/internal/modload/query_test.go +++ b/src/cmd/go/internal/modload/query_test.go @@ -165,6 +165,13 @@ var ( realPath: "github.com/google/codesearch", version: "v1.1.0", }, + { + path: "github.com/google/codesearch/cmd/...", + query: "v1.1.0", + err: "", + realPath: "github.com/google/codesearch", + version: "v1.1.0", + }, { path: "github.com/google/codesearch/cmd", query: "latest", @@ -172,6 +179,13 @@ var ( realPath: "github.com/google/codesearch", version: "v1.1.0", }, + { + path: "github.com/google/codesearch/cmd", + query: "v1.1.0", + err: `unknown revision cmd/v1.1.0`, + realPath: "github.com/google/codesearch", + version: "v1.1.0", + }, { path: "github.com/google/codesearch/...", query: "latest", @@ -179,6 +193,13 @@ var ( realPath: "github.com/google/codesearch", version: "v1.1.0", }, + { + path: "github.com/google/codesearch/...", + query: "v1.1.0", + err: ``, + realPath: "github.com/google/codesearch", + version: "v1.1.0", + }, { path: "github.com/google/codesearch", query: "latest", @@ -186,6 +207,13 @@ var ( realPath: "github.com/google/codesearch", version: "v1.1.0", }, + { + path: "github.com/google/codesearch", + query: "v1.1.0", + err: `invalid github.com/ import path "github.com/google"`, + realPath: "github.com/google/codesearch", + version: "v1.1.0", + }, } ) From 2322179fedb5661d349584d9c19f41f507c6506b Mon Sep 17 00:00:00 2001 From: hxzhao527 Date: Thu, 10 Jan 2019 19:53:42 +0800 Subject: [PATCH 5/5] add mod test --- .../go/testdata/script/mod_get_wildcard.txt | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/cmd/go/testdata/script/mod_get_wildcard.txt diff --git a/src/cmd/go/testdata/script/mod_get_wildcard.txt b/src/cmd/go/testdata/script/mod_get_wildcard.txt new file mode 100644 index 00000000000000..16e794aa389b07 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_wildcard.txt @@ -0,0 +1,79 @@ +# This testcase is specific for wildcards +env GO111MODULE=on + +# turn off proxy. +[!net] skip +[!exec:git] skip +env GOPROXY= + +# try get master, just similar with mod_get_pseudo, except end with /... (wildcards) +go get -m github.com/rsc/legacytest/...@master +go list -m all +stdout '^github.com/rsc/legacytest v2\.0\.1-0\.\d{14}-7303f7796364\+incompatible$' + +# try get latest, just similar with mod_get_pseudo, except end with /... (wildcards) +go get -m github.com/rsc/legacytest/...@latest +go list +go list -m all +stdout '^github.com/rsc/legacytest v2\.0\.0\+incompatible$' + +# v2.0.1-0.pseudo+incompatible +go get -m ...test...@7303f77 +go list -m all +stdout '^github.com/rsc/legacytest v2\.0\.1-0\.\d{14}-7303f7796364\+incompatible$' + +# v2.0.0+incompatible by tag+incompatible +go get -m ...test...@v2.0.0+incompatible +go list -m all +stdout '^github.com/rsc/legacytest v2\.0\.0\+incompatible$' + +# v2.0.0+incompatible by tag +go get -m ...test...@v2.0.0 +go list -m all +stdout '^github.com/rsc/legacytest v2\.0\.0\+incompatible$' + +# v2.0.0+incompatible by hash (back on master) +go get -m ...test...@d7ae1e4 +go list -m all +stdout '^github.com/rsc/legacytest v2\.0\.0\+incompatible$' + +# v1.2.1-0.pseudo +go get -m ...test...@d2d4c3e +go list -m all +stdout '^github.com/rsc/legacytest v1\.2\.1-0\.\d{14}-d2d4c3ea6623$' + +# v1.2.0 +go get -m ...test...@9f6f860 +go list -m all +stdout '^github.com/rsc/legacytest v1\.2\.0$' + +# v1.1.0-pre.0.pseudo +go get -m ...test...@fb3c628 +go list -m all +stdout '^github.com/rsc/legacytest v1\.1\.0-pre\.0\.\d{14}-fb3c628075e3$' + +# v1.1.0-pre (no longer on master) +go get -m ...test...@731e3b1 +go list -m all +stdout '^github.com/rsc/legacytest v1\.1\.0-pre$' + +# v1.0.1-0.pseudo +go get -m ...test...@fa4f5d6 +go list -m all +stdout '^github.com/rsc/legacytest v1\.0\.1-0\.\d{14}-fa4f5d6a71c6$' + +# v1.0.0 +go get -m ...test...@7fff7f3 +go list -m all +stdout '^github.com/rsc/legacytest v1\.0\.0$' + +# v0.0.0-pseudo +go get -m ...test...@52853eb +go list -m all +stdout '^github.com/rsc/legacytest v0\.0\.0-\d{14}-52853eb7b552$' + +-- go.mod -- +module x +-- x.go -- +package x +import "github.com/rsc/legacytest" \ No newline at end of file