github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/packages/packagestest/gopath.go (about) 1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package packagestest 6 7 import ( 8 "path" 9 "path/filepath" 10 ) 11 12 // GOPATH is the exporter that produces GOPATH layouts. 13 // Each "module" is put in it's own GOPATH entry to help test complex cases. 14 // Given the two files 15 // 16 // golang.org/repoa#a/a.go 17 // golang.org/repob#b/b.go 18 // 19 // You would get the directory layout 20 // 21 // /sometemporarydirectory 22 // ├── repoa 23 // │ └── src 24 // │ └── golang.org 25 // │ └── repoa 26 // │ └── a 27 // │ └── a.go 28 // └── repob 29 // └── src 30 // └── golang.org 31 // └── repob 32 // └── b 33 // └── b.go 34 // 35 // GOPATH would be set to 36 // 37 // /sometemporarydirectory/repoa;/sometemporarydirectory/repob 38 // 39 // and the working directory would be 40 // 41 // /sometemporarydirectory/repoa/src 42 var GOPATH = gopath{} 43 44 func init() { 45 All = append(All, GOPATH) 46 } 47 48 type gopath struct{} 49 50 func (gopath) Name() string { 51 return "GOPATH" 52 } 53 54 func (gopath) Filename(exported *Exported, module, fragment string) string { 55 return filepath.Join(gopathDir(exported, module), "src", module, fragment) 56 } 57 58 func (gopath) Finalize(exported *Exported) error { 59 exported.Config.Env = append(exported.Config.Env, "GO111MODULE=off") 60 gopath := "" 61 for module := range exported.written { 62 if gopath != "" { 63 gopath += string(filepath.ListSeparator) 64 } 65 dir := gopathDir(exported, module) 66 gopath += dir 67 if module == exported.primary { 68 exported.Config.Dir = filepath.Join(dir, "src") 69 } 70 } 71 exported.Config.Env = append(exported.Config.Env, "GOPATH="+gopath) 72 return nil 73 } 74 75 func gopathDir(exported *Exported, module string) string { 76 dir := path.Base(module) 77 if versionSuffixRE.MatchString(dir) { 78 dir = path.Base(path.Dir(module)) + "_" + dir 79 } 80 return filepath.Join(exported.temp, dir) 81 }