75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
// Copyright 2018 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package packagestest
|
|
|
|
import (
|
|
"path"
|
|
"path/filepath"
|
|
)
|
|
|
|
// GOPATH is the exporter that produces GOPATH layouts.
|
|
// Each "module" is put in it's own GOPATH entry to help test complex cases.
|
|
// Given the two files
|
|
// golang.org/repoa#a/a.go
|
|
// golang.org/repob#b/b.go
|
|
// You would get the directory layout
|
|
// /sometemporarydirectory
|
|
// ├── repoa
|
|
// │ └── src
|
|
// │ └── golang.org
|
|
// │ └── repoa
|
|
// │ └── a
|
|
// │ └── a.go
|
|
// └── repob
|
|
// └── src
|
|
// └── golang.org
|
|
// └── repob
|
|
// └── b
|
|
// └── b.go
|
|
// GOPATH would be set to
|
|
// /sometemporarydirectory/repoa;/sometemporarydirectory/repob
|
|
// and the working directory would be
|
|
// /sometemporarydirectory/repoa/src
|
|
var GOPATH = gopath{}
|
|
|
|
func init() {
|
|
All = append(All, GOPATH)
|
|
}
|
|
|
|
type gopath struct{}
|
|
|
|
func (gopath) Name() string {
|
|
return "GOPATH"
|
|
}
|
|
|
|
func (gopath) Filename(exported *Exported, module, fragment string) string {
|
|
return filepath.Join(gopathDir(exported, module), "src", module, fragment)
|
|
}
|
|
|
|
func (gopath) Finalize(exported *Exported) error {
|
|
exported.Config.Env = append(exported.Config.Env, "GO111MODULE=off")
|
|
gopath := ""
|
|
for module := range exported.written {
|
|
if gopath != "" {
|
|
gopath += string(filepath.ListSeparator)
|
|
}
|
|
dir := gopathDir(exported, module)
|
|
gopath += dir
|
|
if module == exported.primary {
|
|
exported.Config.Dir = filepath.Join(dir, "src")
|
|
}
|
|
}
|
|
exported.Config.Env = append(exported.Config.Env, "GOPATH="+gopath)
|
|
return nil
|
|
}
|
|
|
|
func gopathDir(exported *Exported, module string) string {
|
|
dir := path.Base(module)
|
|
if versionSuffixRE.MatchString(dir) {
|
|
dir = path.Base(path.Dir(module)) + "_" + dir
|
|
}
|
|
return filepath.Join(exported.temp, dir)
|
|
}
|