diff --git a/build/build.go b/build/build.go index e5b2c2b8f..2a25bc8a4 100644 --- a/build/build.go +++ b/build/build.go @@ -160,7 +160,7 @@ func importWithSrcDir(bctx build.Context, path string, srcDir string, mode build } var pkg *build.Package var err error - if mod != nil { + if mod != nil && mod.IsValid() && !mod.IsStd() { if _, dir, typ := mod.Lookup(path); typ != fastmod.PkgTypeNil { srcDir = dir pkg, err = bctx.ImportDir(srcDir, mode) @@ -490,15 +490,21 @@ type PackageData struct { type Session struct { options *Options bctx *build.Context - Mod *fastmod.Package + mod *fastmod.Package Archives map[string]*compiler.Archive Types map[string]*types.Package Watcher *fsnotify.Watcher } -func (s *Session) LoadMod(dir string) (err error) { - s.Mod, err = fastmod.LoadPackage(dir, s.bctx) - return +func (s *Session) checkMod(pkg *PackageData) (err error) { + s.mod.Clear() + if pkg != nil && !pkg.Goroot { + err := s.mod.LoadModule(pkg.Dir) + if err != nil { + return err + } + } + return nil } func NewSession(options *Options) *Session { @@ -515,6 +521,7 @@ func NewSession(options *Options) *Session { Archives: make(map[string]*compiler.Archive), } s.bctx = NewBuildContext(s.InstallSuffix(), s.options.BuildTags) + s.mod = fastmod.NewPackage(s.bctx) s.Types = make(map[string]*types.Package) if options.Watch { if out, err := exec.Command("ulimit", "-n").Output(); err == nil { @@ -556,7 +563,7 @@ func (s *Session) BuildDir(packagePath string, importPath string, pkgObj string) return err } pkg.JSFiles = jsFiles - archive, err := s.BuildPackage(pkg) + archive, err := s.buildPackage(pkg) if err != nil { return err } @@ -579,6 +586,10 @@ func (s *Session) BuildFiles(filenames []string, pkgObj string, packagePath stri Dir: packagePath, }, } + err := s.checkMod(pkg) + if err != nil { + return err + } for _, file := range filenames { if strings.HasSuffix(file, ".inc.js") { @@ -588,7 +599,7 @@ func (s *Session) BuildFiles(filenames []string, pkgObj string, packagePath stri pkg.GoFiles = append(pkg.GoFiles, file) } - archive, err := s.BuildPackage(pkg) + archive, err := s.buildPackage(pkg) if err != nil { return err } @@ -609,7 +620,7 @@ func (s *Session) BuildImportPathWithPackage(path string, pkgData *PackageData) if pkgData != nil { srcDir = pkgData.Dir if !pkgData.Goroot { - mod = s.Mod + mod = s.mod } } pkg, err := importWithSrcDir(*s.bctx, path, srcDir, 0, s.InstallSuffix(), mod) @@ -620,7 +631,7 @@ func (s *Session) BuildImportPathWithPackage(path string, pkgData *PackageData) return nil, nil, err } - archive, err := s.BuildPackage(pkg) + archive, err := s.buildPackage(pkg) if err != nil { return nil, nil, err } @@ -629,6 +640,14 @@ func (s *Session) BuildImportPathWithPackage(path string, pkgData *PackageData) } func (s *Session) BuildPackage(pkg *PackageData) (*compiler.Archive, error) { + err := s.checkMod(pkg) + if err != nil { + return nil, err + } + return s.buildPackage(pkg) +} + +func (s *Session) buildPackage(pkg *PackageData) (*compiler.Archive, error) { if archive, ok := s.Archives[pkg.ImportPath]; ok { return archive, nil } diff --git a/go.mod b/go.mod index 52eaefe21..ad5b6741e 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd // indirect github.com/spf13/cobra v0.0.5 github.com/spf13/pflag v1.0.5 - github.com/visualfc/fastmod v1.2.0 + github.com/visualfc/fastmod v1.3.3 golang.org/x/crypto v0.0.0-20200208060501-ecb85df21340 golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 golang.org/x/tools v0.0.0-20200131143746-097c1f2eed26 diff --git a/go.sum b/go.sum index 54775763a..50108c055 100644 --- a/go.sum +++ b/go.sum @@ -68,6 +68,10 @@ github.com/visualfc/fastmod v1.0.0 h1:3UcYFM+mzdk5AeKF7itO7D7rEv9Vkk0f2HOZi6KCMh github.com/visualfc/fastmod v1.0.0/go.mod h1:MjR7AyXKzcr5S9uEeJPI4xID37/q88a8FSBS/2H8AFc= github.com/visualfc/fastmod v1.2.0 h1:DwuyA4xcSzQ/dwAA75nO2J8YXr8h/ouLEzzhIKGfURA= github.com/visualfc/fastmod v1.2.0/go.mod h1:GGLvzTGsAMsVBMSLEnypACnwEj6syguJSV0qob6LveI= +github.com/visualfc/fastmod v1.3.2 h1:epzPttZQB6zsll9g16s2s0TidibhYDRJOz9nin1jwWc= +github.com/visualfc/fastmod v1.3.2/go.mod h1:IpOumy9gVomQ72T+yA7gayE3V1FCNlwr6if3mlqnasY= +github.com/visualfc/fastmod v1.3.3 h1:NPT3Zog9LJT0IX8pSTYIYUiL/HUib5tVUrySZXMDLEU= +github.com/visualfc/fastmod v1.3.3/go.mod h1:IpOumy9gVomQ72T+yA7gayE3V1FCNlwr6if3mlqnasY= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.starlark.net v0.0.0-20190702223751-32f345186213/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg= golang.org/x/arch v0.0.0-20171004143515-077ac972c2e4/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8= diff --git a/tool.go b/tool.go index 66107efcc..3efceeb2f 100644 --- a/tool.go +++ b/tool.go @@ -78,7 +78,7 @@ func main() { compilerFlags.BoolVar(&options.Color, "color", terminal.IsTerminal(int(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb", "colored output") compilerFlags.StringVar(&tags, "tags", "", "a list of build tags to consider satisfied during the build") compilerFlags.BoolVar(&options.MapToLocalDisk, "localmap", false, "use local paths for sourcemap") - compilerFlags.BoolVarP(&options.Rebuild, "force", "f", false, "force rebuilding of packages that are already up-to-date") + compilerFlags.BoolVarP(&options.Rebuild, "force", "a", false, "force rebuilding of packages that are already up-to-date") flagWatch := pflag.NewFlagSet("", 0) flagWatch.BoolVarP(&options.Watch, "watch", "w", false, "watch for changes to the source files") @@ -136,10 +136,6 @@ func main() { if err != nil { return err } - if !pkg.Goroot { - s.LoadMod(pkg.Dir) - } - archive, err := s.BuildPackage(pkg) if err != nil { return err @@ -200,10 +196,6 @@ func main() { if err != nil { return err } - if !pkg.Goroot { - s.LoadMod(pkg.Dir) - } - archive, err := s.BuildPackage(pkg) if err != nil { return err @@ -338,9 +330,6 @@ func main() { continue } s := gbuild.NewSession(options) - if !pkg.Goroot { - s.LoadMod(pkg.Dir) - } tests := &testFuncs{BuildContext: s.BuildContext(), Package: pkg.Package} collectTests := func(testPkg *gbuild.PackageData, testPkgName string, needVar *bool) error { @@ -592,10 +581,6 @@ func (fs serveCommandFileSystem) Open(requestName string) (http.File, error) { } switch { case isPkg: - if !pkg.Goroot { - s.LoadMod(pkg.Dir) - } - buf := new(bytes.Buffer) browserErrors := new(bytes.Buffer) err := func() error {