if modload.WorkFilePath(modload.LoaderState) != "" {
base.Fatalf("go: 'go mod vendor' cannot be run in workspace mode. Run 'go work vendor' to vendor the workspace or set 'GOWORK=off' to exit workspace mode.")
}
- RunVendor(ctx, vendorE, vendorO, args)
+ RunVendor(modload.LoaderState, ctx, vendorE, vendorO, args)
}
-func RunVendor(ctx context.Context, vendorE bool, vendorO string, args []string) {
+func RunVendor(loaderstate *modload.State, ctx context.Context, vendorE bool, vendorO string, args []string) {
if len(args) != 0 {
base.Fatalf("go: 'go mod vendor' accepts no arguments")
}
- modload.LoaderState.ForceUseModules = true
- modload.LoaderState.RootMode = modload.NeedRoot
+ loaderstate.ForceUseModules = true
+ loaderstate.RootMode = modload.NeedRoot
loadOpts := modload.PackageOpts{
Tags: imports.AnyTags(),
AllowErrors: vendorE,
SilenceMissingStdImports: true,
}
- _, pkgs := modload.LoadPackages(modload.LoaderState, ctx, loadOpts, "all")
+ _, pkgs := modload.LoadPackages(loaderstate, ctx, loadOpts, "all")
var vdir string
switch {
case vendorO != "":
vdir = filepath.Join(base.Cwd(), vendorO)
default:
- vdir = filepath.Join(modload.VendorDir(modload.LoaderState))
+ vdir = filepath.Join(modload.VendorDir(loaderstate))
}
if err := os.RemoveAll(vdir); err != nil {
base.Fatal(err)
modpkgs := make(map[module.Version][]string)
for _, pkg := range pkgs {
m := modload.PackageModule(pkg)
- if m.Path == "" || modload.LoaderState.MainModules.Contains(m.Path) {
+ if m.Path == "" || loaderstate.MainModules.Contains(m.Path) {
continue
}
modpkgs[m] = append(modpkgs[m], pkg)
includeAllReplacements := false
includeGoVersions := false
isExplicit := map[module.Version]bool{}
- gv := modload.LoaderState.MainModules.GoVersion(modload.LoaderState)
- if gover.Compare(gv, "1.14") >= 0 && (modload.FindGoWork(modload.LoaderState, base.Cwd()) != "" || modload.ModFile().Go != nil) {
+ gv := loaderstate.MainModules.GoVersion(loaderstate)
+ if gover.Compare(gv, "1.14") >= 0 && (modload.FindGoWork(loaderstate, base.Cwd()) != "" || modload.ModFile(loaderstate).Go != nil) {
// If the Go version is at least 1.14, annotate all explicit 'require' and
// 'replace' targets found in the go.mod file so that we can perform a
// stronger consistency check when -mod=vendor is set.
- for _, m := range modload.LoaderState.MainModules.Versions() {
- if modFile := modload.LoaderState.MainModules.ModFile(m); modFile != nil {
+ for _, m := range loaderstate.MainModules.Versions() {
+ if modFile := loaderstate.MainModules.ModFile(m); modFile != nil {
for _, r := range modFile.Require {
isExplicit[r.Mod] = true
}
w = io.MultiWriter(&buf, os.Stderr)
}
- if modload.LoaderState.MainModules.WorkFile() != nil {
+ if loaderstate.MainModules.WorkFile() != nil {
fmt.Fprintf(w, "## workspace\n")
}
replacementWritten := make(map[module.Version]bool)
for _, m := range vendorMods {
- replacement := modload.Replacement(modload.LoaderState, m)
+ replacement := modload.Replacement(loaderstate, m)
line := moduleLine(m, replacement)
replacementWritten[m] = true
io.WriteString(w, line)
goVersion := ""
if includeGoVersions {
- goVersion = modload.ModuleInfo(modload.LoaderState, ctx, m.Path).GoVersion
+ goVersion = modload.ModuleInfo(loaderstate, ctx, m.Path).GoVersion
}
switch {
case isExplicit[m] && goVersion != "":
sort.Strings(pkgs)
for _, pkg := range pkgs {
fmt.Fprintf(w, "%s\n", pkg)
- vendorPkg(vdir, pkg)
+ vendorPkg(loaderstate, vdir, pkg)
}
}
// Record unused and wildcard replacements at the end of the modules.txt file:
// without access to the complete build list, the consumer of the vendor
// directory can't otherwise determine that those replacements had no effect.
- for _, m := range modload.LoaderState.MainModules.Versions() {
- if workFile := modload.LoaderState.MainModules.WorkFile(); workFile != nil {
+ for _, m := range loaderstate.MainModules.Versions() {
+ if workFile := loaderstate.MainModules.WorkFile(); workFile != nil {
for _, r := range workFile.Replace {
if replacementWritten[r.Old] {
// We already recorded this replacement.
}
}
}
- if modFile := modload.LoaderState.MainModules.ModFile(m); modFile != nil {
+ if modFile := loaderstate.MainModules.ModFile(m); modFile != nil {
for _, r := range modFile.Replace {
if replacementWritten[r.Old] {
// We already recorded this replacement.
continue
}
replacementWritten[r.Old] = true
- rNew := modload.Replacement(modload.LoaderState, r.Old)
+ rNew := modload.Replacement(loaderstate, r.Old)
if rNew == (module.Version{}) {
// There is no replacement. Don't try to write it.
continue
return b.String()
}
-func vendorPkg(vdir, pkg string) {
- src, realPath, _ := modload.Lookup(modload.LoaderState, "", false, pkg)
+func vendorPkg(loaderstate *modload.State, vdir, pkg string) {
+ src, realPath, _ := modload.Lookup(loaderstate, "", false, pkg)
if src == "" {
base.Errorf("internal error: no pkg for %s\n", pkg)
return
}
}
var embedPatterns []string
- if gover.Compare(modload.LoaderState.MainModules.GoVersion(modload.LoaderState), "1.22") >= 0 {
+ if gover.Compare(loaderstate.MainModules.GoVersion(loaderstate), "1.22") >= 0 {
embedPatterns = bp.EmbedPatterns
} else {
// Maintain the behavior of https://github.com/golang/go/issues/63473