...

Source file src/golang.org/x/tools/go/packages/packagestest/gopath.go

Documentation: golang.org/x/tools/go/packages/packagestest

     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  }
    82  

View as plain text