diff --git a/go/packages/golist_overlay.go b/go/packages/golist_overlay.go index b35399ef..ffc7a367 100644 --- a/go/packages/golist_overlay.go +++ b/go/packages/golist_overlay.go @@ -32,6 +32,13 @@ func processGolistOverlay(cfg *Config, response *responseDeduper) (modifiedPkgs, var rootDirs map[string]string var onceGetRootDirs sync.Once + // If no new imports are added, it is safe to avoid loading any needPkgs. + // Otherwise, it's hard to tell which package is actually being loaded + // (due to vendoring) and whether any modified package will show up + // in the transitive set of dependencies (because new imports are added, + // potentially modifying the transitive set of dependencies). + var overlayAddsImports bool + for opath, contents := range cfg.Overlay { base := filepath.Base(opath) dir := filepath.Dir(opath) @@ -136,6 +143,7 @@ func processGolistOverlay(cfg *Config, response *responseDeduper) (modifiedPkgs, for _, imp := range imports { _, found := pkg.Imports[imp] if !found { + overlayAddsImports = true // TODO(matloob): Handle cases when the following block isn't correct. // These include imports of test variants, imports of vendored packages, etc. id, ok := havePkgs[imp] @@ -171,9 +179,11 @@ func processGolistOverlay(cfg *Config, response *responseDeduper) (modifiedPkgs, } } - needPkgs = make([]string, 0, len(needPkgsSet)) - for pkg := range needPkgsSet { - needPkgs = append(needPkgs, pkg) + if overlayAddsImports { + needPkgs = make([]string, 0, len(needPkgsSet)) + for pkg := range needPkgsSet { + needPkgs = append(needPkgs, pkg) + } } modifiedPkgs = make([]string, 0, len(modifiedPkgsSet)) for pkg := range modifiedPkgsSet {