cmd/go: add base.Error and base.Fatal

Many many places in the go command use

	base.Errorf("go: %v", err)

or

	base.Fatalf("go: %v", err)

Introduce Error(error) and Fatal(error) to do this
and update all call sites (global search and replace).

The new Error gives us the opportunity to unwrap
a multierror and add the go prefix to each line,
which is the motivation for this change.
(We want to start returning a multierror from LoadModFile
and LoadModGraph.)

For #57001.

Change-Id: I9613653b94808224146077c30d22f814d4e19eed
Reviewed-on: https://go-review.googlesource.com/c/go/+/499980
Auto-Submit: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
This commit is contained in:
Russ Cox 2023-06-01 13:25:56 -04:00 committed by Gopher Robot
parent 9f450041c5
commit 8035de592f
27 changed files with 116 additions and 91 deletions

View File

@ -13,6 +13,7 @@ import (
"log"
"os"
"os/exec"
"reflect"
"strings"
"sync"
@ -133,6 +134,28 @@ func ExitIfErrors() {
}
}
func Error(err error) {
// We use errors.Join to return multiple errors from various routines.
// If we receive multiple errors joined with a basic errors.Join,
// handle each one separately so that they all have the leading "go: " prefix.
// A plain interface check is not good enough because there might be
// other kinds of structured errors that are logically one unit and that
// add other context: only handling the wrapped errors would lose
// that context.
if err != nil && reflect.TypeOf(err).String() == "*errors.joinError" {
for _, e := range err.(interface{ Unwrap() []error }).Unwrap() {
Error(e)
}
return
}
Errorf("go: %v", err)
}
func Fatal(err error) {
Error(err)
Exit()
}
var exitStatus = 0
var exitMu sync.Mutex

View File

@ -172,7 +172,7 @@ func runClean(ctx context.Context, cmd *base.Command, args []string) {
// This also mimics what os.RemoveAll(dir) would do.
if err := os.RemoveAll(d); err != nil && !printedErrors {
printedErrors = true
base.Errorf("go: %v", err)
base.Error(err)
}
}
}
@ -185,7 +185,7 @@ func runClean(ctx context.Context, cmd *base.Command, args []string) {
if !cfg.BuildN {
if err := os.RemoveAll(logFile); err != nil && !printedErrors {
printedErrors = true
base.Errorf("go: %v", err)
base.Error(err)
}
}
}
@ -215,7 +215,7 @@ func runClean(ctx context.Context, cmd *base.Command, args []string) {
}
if err != nil {
if _, statErr := os.Stat(dir); !os.IsNotExist(statErr) {
base.Errorf("go: %v", err)
base.Error(err)
}
}
}
@ -230,7 +230,7 @@ func runClean(ctx context.Context, cmd *base.Command, args []string) {
}
if !cfg.BuildN {
if err := modfetch.RemoveAll(cfg.GOMODCACHE); err != nil {
base.Errorf("go: %v", err)
base.Error(err)
}
}
}
@ -242,7 +242,7 @@ func runClean(ctx context.Context, cmd *base.Command, args []string) {
}
if !cfg.BuildN {
if err := os.RemoveAll(fuzzDir); err != nil {
base.Errorf("go: %v", err)
base.Error(err)
}
}
}
@ -372,7 +372,7 @@ func clean(p *load.Package) {
}
}
if err := os.RemoveAll(filepath.Join(p.Dir, name)); err != nil {
base.Errorf("go: %v", err)
base.Error(err)
}
}
continue
@ -424,5 +424,5 @@ func removeFile(f string) {
return
}
}
base.Errorf("go: %v", err)
base.Error(err)
}

View File

@ -185,7 +185,7 @@ func ExtraEnvVarsCostly() []cfg.EnvVar {
b := work.NewBuilder("")
defer func() {
if err := b.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}()
@ -251,7 +251,7 @@ func runEnv(ctx context.Context, cmd *base.Command, args []string) {
buildcfg.Check()
if cfg.ExperimentErr != nil {
base.Fatalf("go: %v", cfg.ExperimentErr)
base.Fatal(cfg.ExperimentErr)
}
for _, arg := range args {
@ -264,7 +264,7 @@ func runEnv(ctx context.Context, cmd *base.Command, args []string) {
env = append(env, ExtraEnvVars()...)
if err := fsys.Init(base.Cwd()); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
// Do we need to call ExtraEnvVarsCostly, which is a bit expensive?
@ -337,7 +337,7 @@ func runEnvW(args []string) {
base.Fatalf("go: arguments must be KEY=VALUE: invalid argument: %s", arg)
}
if err := checkEnvWrite(key, val); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
if _, ok := add[key]; ok {
base.Fatalf("go: multiple values for key: %s", key)
@ -349,7 +349,7 @@ func runEnvW(args []string) {
}
if err := checkBuildConfig(add, nil); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
gotmp, okGOTMP := add["GOTMPDIR"]
@ -370,13 +370,13 @@ func runEnvU(args []string) {
del := make(map[string]bool)
for _, arg := range args {
if err := checkEnvWrite(arg, ""); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
del[arg] = true
}
if err := checkBuildConfig(nil, del); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
updateEnvFile(nil, del)

View File

@ -10,6 +10,7 @@ import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"io"
"os"
@ -569,11 +570,11 @@ func runList(ctx context.Context, cmd *base.Command, args []string) {
if !*listE {
for _, m := range mods {
if m.Error != nil {
base.Errorf("go: %v", m.Error.Err)
base.Error(errors.New(m.Error.Err))
}
}
if err != nil {
base.Errorf("go: %v", err)
base.Error(err)
}
base.ExitIfErrors()
}
@ -715,7 +716,7 @@ func runList(ctx context.Context, cmd *base.Command, args []string) {
}
defer func() {
if err := b.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}()
@ -847,7 +848,7 @@ func runList(ctx context.Context, cmd *base.Command, args []string) {
}
rmods, err := modload.ListModules(ctx, args, mode, *listReuse)
if err != nil && !*listE {
base.Errorf("go: %v", err)
base.Error(err)
}
for i, arg := range args {
rmod := rmods[i]

View File

@ -941,7 +941,7 @@ func loadPackageData(ctx context.Context, path, parentPath, parentDir, parentRoo
data.p, data.err = rp.Import(cfg.BuildContext, buildMode)
goto Happy
} else if !errors.Is(err, modindex.ErrNotIndexed) {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
data.p, data.err = buildContext.ImportDir(r.dir, buildMode)

View File

@ -7,6 +7,7 @@ package modcmd
import (
"context"
"encoding/json"
"errors"
"os"
"runtime"
@ -152,7 +153,7 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) {
// 'go mod graph', and similar commands.
_, err := modload.LoadModGraph(ctx, "")
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
for _, m := range modFile.Require {
@ -208,7 +209,7 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) {
// be updated after loading the build list. This may require setting
// the mode to "mod" or "readonly" depending on haveExplicitArgs.
if err := modload.WriteGoMod(ctx, modload.WriteOpts{}); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
@ -252,7 +253,7 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) {
for _, m := range mods {
b, err := json.MarshalIndent(m, "", "\t")
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
os.Stdout.Write(append(b, '\n'))
if m.Error != "" {
@ -262,7 +263,7 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) {
} else {
for _, m := range mods {
if m.Error != "" {
base.Errorf("go: %v", m.Error)
base.Error(errors.New(m.Error))
}
}
base.ExitIfErrors()
@ -287,7 +288,7 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) {
// workspace mode; see comment above.
if haveExplicitArgs || modload.WorkFilePath() != "" {
if err := modload.WriteGoMod(ctx, modload.WriteOpts{}); err != nil {
base.Errorf("go: %v", err)
base.Error(err)
}
}
@ -295,7 +296,7 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) {
// (after we've written the checksums for the modules that were downloaded
// successfully).
if infosErr != nil {
base.Errorf("go: %v", infosErr)
base.Error(infosErr)
}
}

View File

@ -215,7 +215,7 @@ func runEdit(ctx context.Context, cmd *base.Command, args []string) {
data, err := lockedfile.Read(gomod)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
modFile, err := modfile.Parse(gomod, data, nil)
@ -257,7 +257,7 @@ func runEdit(ctx context.Context, cmd *base.Command, args []string) {
out, err := modFile.Format()
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
if *editPrint {
@ -278,7 +278,7 @@ func runEdit(ctx context.Context, cmd *base.Command, args []string) {
return out, nil
})
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}

View File

@ -63,7 +63,7 @@ func runGraph(ctx context.Context, cmd *base.Command, args []string) {
goVersion := graphGo.String()
if goVersion != "" && gover.Compare(gover.Local(), goVersion) < 0 {
toolchain.TryVersion(ctx, goVersion)
base.Fatalf("go: %v", &gover.TooNewError{
base.Fatal(&gover.TooNewError{
What: "-go flag",
GoVersion: goVersion,
})
@ -71,7 +71,7 @@ func runGraph(ctx context.Context, cmd *base.Command, args []string) {
mg, err := modload.LoadModGraph(ctx, goVersion)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
w := bufio.NewWriter(os.Stdout)

View File

@ -92,7 +92,7 @@ func runVendor(ctx context.Context, cmd *base.Command, args []string) {
vdir = filepath.Join(modload.VendorDir())
}
if err := os.RemoveAll(vdir); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
modpkgs := make(map[module.Version][]string)
@ -194,11 +194,11 @@ func runVendor(ctx context.Context, cmd *base.Command, args []string) {
}
if err := os.MkdirAll(vdir, 0777); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
if err := os.WriteFile(filepath.Join(vdir, "modules.txt"), buf.Bytes(), 0666); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
@ -274,7 +274,7 @@ func vendorPkg(vdir, pkg string) {
embedPatterns := str.StringList(bp.EmbedPatterns, bp.TestEmbedPatterns, bp.XTestEmbedPatterns)
embeds, err := load.ResolveEmbed(bp.Dir, embedPatterns)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
for _, embed := range embeds {
embedDst := filepath.Join(dst, embed)
@ -285,21 +285,21 @@ func vendorPkg(vdir, pkg string) {
// Copy the file as is done by copyDir below.
r, err := os.Open(filepath.Join(src, embed))
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
if err := os.MkdirAll(filepath.Dir(embedDst), 0777); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
w, err := os.Create(embedDst)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
if _, err := io.Copy(w, r); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
r.Close()
if err := w.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
}
@ -378,7 +378,7 @@ func matchPotentialSourceFile(dir string, info fs.DirEntry) bool {
if strings.HasSuffix(info.Name(), ".go") {
f, err := fsys.Open(filepath.Join(dir, info.Name()))
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
defer f.Close()
@ -400,10 +400,10 @@ func matchPotentialSourceFile(dir string, info fs.DirEntry) bool {
func copyDir(dst, src string, match func(dir string, info fs.DirEntry) bool, copiedFiles map[string]bool) {
files, err := os.ReadDir(src)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
if err := os.MkdirAll(dst, 0777); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
for _, file := range files {
if file.IsDir() || !file.Type().IsRegular() || !match(src, file) {
@ -412,20 +412,20 @@ func copyDir(dst, src string, match func(dir string, info fs.DirEntry) bool, cop
copiedFiles[file.Name()] = true
r, err := os.Open(filepath.Join(src, file.Name()))
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
dstPath := filepath.Join(dst, file.Name())
copiedFiles[dstPath] = true
w, err := os.Create(dstPath)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
if _, err := io.Copy(w, r); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
r.Close()
if err := w.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
}

View File

@ -59,7 +59,7 @@ func runVerify(ctx context.Context, cmd *base.Command, args []string) {
mg, err := modload.LoadModGraph(ctx, "")
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
mods := mg.BuildList()[modload.MainModules.Len():]
// Use a slice of result channels, so that the output is deterministic.

View File

@ -85,7 +85,7 @@ func runWhy(ctx context.Context, cmd *base.Command, args []string) {
mods, err := modload.ListModules(ctx, args, 0, "")
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
byModule := make(map[string][]string)

View File

@ -47,7 +47,7 @@ func Download(ctx context.Context, mod module.Version) (dir string, err error) {
return "", ErrToolchain
}
if err := checkCacheDir(ctx); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
// The par.Cache here avoids duplicate work.

View File

@ -391,7 +391,7 @@ func runGet(ctx context.Context, cmd *base.Command, args []string) {
// TODO(bcmills): modload.EditBuildList should catch this instead.
toolchain.TryVersion(ctx, tooNew.GoVersion)
}
base.Fatalf("go: %v", err)
base.Fatal(err)
}
newReqs := reqsFromGoMod(modload.ModFile())
@ -408,7 +408,7 @@ func parseArgs(ctx context.Context, rawArgs []string) (dropToolchain bool, queri
for _, arg := range search.CleanPatterns(rawArgs) {
q, err := newQuery(arg)
if err != nil {
base.Errorf("go: %v", err)
base.Error(err)
continue
}
@ -495,7 +495,7 @@ func newResolver(ctx context.Context, queries []*query) *resolver {
if tooNew := (*gover.TooNewError)(nil); errors.As(err, &tooNew) {
toolchain.TryVersion(ctx, tooNew.GoVersion)
}
base.Fatalf("go: %v", err)
base.Fatal(err)
}
buildList := mg.BuildList()
@ -1332,7 +1332,7 @@ func (r *resolver) applyUpgrades(ctx context.Context, upgrades []pathSet) (chang
var tentative []module.Version
for _, cs := range upgrades {
if cs.err != nil {
base.Errorf("go: %v", cs.err)
base.Error(cs.err)
continue
}
@ -1670,7 +1670,7 @@ func (r *resolver) checkPackageProblems(ctx context.Context, pkgPatterns []strin
}
for _, err := range sumErrs {
if err != nil {
base.Errorf("go: %v", err)
base.Error(err)
}
}
base.ExitIfErrors()
@ -1837,12 +1837,12 @@ func (r *resolver) updateBuildList(ctx context.Context, additions []module.Versi
if err != nil {
if tooNew := (*gover.TooNewError)(nil); errors.As(err, &tooNew) {
toolchain.TryVersion(ctx, tooNew.GoVersion)
base.Fatalf("go: %v", err)
base.Fatal(err)
}
var constraint *modload.ConstraintError
if !errors.As(err, &constraint) {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
if cfg.BuildV {
@ -1886,7 +1886,7 @@ func (r *resolver) updateBuildList(ctx context.Context, additions []module.Versi
if tooNew := (*gover.TooNewError)(nil); errors.As(err, &tooNew) {
toolchain.TryVersion(ctx, tooNew.GoVersion)
}
base.Fatalf("go: %v", err)
base.Fatal(err)
}
r.buildList = mg.BuildList()

View File

@ -105,7 +105,7 @@ func ModuleInfo(ctx context.Context, path string) *modinfo.ModulePublic {
if !ok {
mg, err := rs.Graph(ctx)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
v = mg.Selected(path)
}

View File

@ -197,7 +197,7 @@ func (rs *Requirements) initVendor(vendorList []module.Version) {
}
}
if inconsistent {
base.Fatalf("go: %v", errGoModDirty)
base.Fatal(errGoModDirty)
}
// Now we can treat the rest of the module graph as effectively “pruned

View File

@ -399,7 +399,7 @@ func Init() {
}
if err := fsys.Init(base.Cwd()); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
// Disable any prompting for passwords by Git.
@ -451,7 +451,7 @@ func Init() {
base.Fatalf("go: cannot find main module, but -modfile was set.\n\t-modfile cannot be used to set the module root directory.")
}
if RootMode == NeedRoot {
base.Fatalf("go: %v", ErrNoModRoot)
base.Fatal(ErrNoModRoot)
}
if !mustUseModules {
// GO111MODULE is 'auto', and we can't find a module root.
@ -618,7 +618,7 @@ func die() {
}
base.Fatalf("go: cannot find main module, but found %s in %s\n\tto create a module there, run:\n\t%sgo mod init", name, dir, cdCmd)
}
base.Fatalf("go: %v", ErrNoModRoot)
base.Fatal(ErrNoModRoot)
}
var ErrNoModRoot = errors.New("go.mod file not found in current directory or any parent directory; see 'go help modules'")
@ -672,7 +672,7 @@ func ReadWorkFile(path string) (*modfile.WorkFile, error) {
return nil, err
}
if f.Go != nil && gover.Compare(f.Go.Version, gover.Local()) > 0 && cfg.CmdName != "work edit" {
base.Fatalf("go: %v", &gover.TooNewError{What: base.ShortPath(path), GoVersion: f.Go.Version})
base.Fatal(&gover.TooNewError{What: base.ShortPath(path), GoVersion: f.Go.Version})
}
return f, nil
}
@ -855,7 +855,7 @@ func loadModFile(ctx context.Context, opts *PackageOpts) *Requirements {
var err error
rs, err = updateRoots(ctx, rs.direct, rs, nil, nil, false)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
@ -880,7 +880,7 @@ func loadModFile(ctx context.Context, opts *PackageOpts) *Requirements {
var err error
rs, err = convertPruning(ctx, rs, pruned)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
} else {
@ -914,7 +914,7 @@ func CreateModFile(ctx context.Context, modPath string) {
var err error
modPath, err = findModulePath(modRoot)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
} else if err := module.CheckImportPath(modPath); err != nil {
if pathErr, ok := err.(*module.InvalidPathError); ok {
@ -925,7 +925,7 @@ func CreateModFile(ctx context.Context, modPath string) {
pathErr.Err = errors.New("is a local import path")
}
}
base.Fatalf("go: %v", err)
base.Fatal(err)
} else if _, _, ok := module.SplitPathVersion(modPath); !ok {
if strings.HasPrefix(modPath, "gopkg.in/") {
invalidMajorVersionMsg := fmt.Errorf("module paths beginning with gopkg.in/ must always have a major version suffix in the form of .vN:\n\tgo mod init %s", suggestGopkgIn(modPath))
@ -946,17 +946,17 @@ func CreateModFile(ctx context.Context, modPath string) {
fmt.Fprintf(os.Stderr, "go: copying requirements from %s\n", base.ShortPath(convertedFrom))
}
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
rs := requirementsFromModFiles(ctx, nil, []*modfile.File{modFile}, nil)
rs, err = updateRoots(ctx, rs.direct, rs, nil, nil, false)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
requirements = rs
if err := commitRequirements(ctx, WriteOpts{}); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
// Suggest running 'go mod tidy' unless the project is empty. Even if we

View File

@ -430,7 +430,7 @@ func LoadPackages(ctx context.Context, opts PackageOpts, patterns ...string) (ma
// preserve checksums for) additional entities from compatRS, which are
// only needed for compatibility with ld.TidyCompatibleVersion.
if err := modfetch.WriteGoSum(ctx, keep, mustHaveCompleteRequirements()); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
}
@ -451,7 +451,7 @@ func LoadPackages(ctx context.Context, opts PackageOpts, patterns ...string) (ma
if !ExplicitWriteGoMod && opts.ResolveMissingImports {
if err := commitRequirements(ctx, WriteOpts{}); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
@ -714,7 +714,7 @@ func ImportFromFiles(ctx context.Context, gofiles []string) {
tags := imports.Tags()
imports, testImports, err := imports.ScanFiles(gofiles, tags)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
loaded = loadFromRoots(ctx, loaderParams{
@ -734,7 +734,7 @@ func ImportFromFiles(ctx context.Context, gofiles []string) {
if !ExplicitWriteGoMod {
if err := commitRequirements(ctx, WriteOpts{}); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}
}

View File

@ -112,7 +112,7 @@ func readVendorList(mainModule module.Version) {
meta.GoVersion = goVersion
rawGoVersion.Store(mod, meta.GoVersion)
if gover.Compare(goVersion, gover.Local()) > 0 {
base.Fatalf("go: %v", &gover.TooNewError{What: mod.Path + " in " + base.ShortPath(vendorFile), GoVersion: goVersion})
base.Fatal(&gover.TooNewError{What: mod.Path + " in " + base.ShortPath(vendorFile), GoVersion: goVersion})
}
}
// All other tokens are reserved for future use.

View File

@ -97,7 +97,7 @@ func runRun(ctx context.Context, cmd *base.Command, args []string) {
b := work.NewBuilder("")
defer func() {
if err := b.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}()
b.Print = printStderr
@ -125,7 +125,7 @@ func runRun(ctx context.Context, cmd *base.Command, args []string) {
var err error
pkgs, err = load.PackagesAndErrorsOutsideModule(ctx, pkgOpts, args[:1])
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
} else {
pkgs = load.PackagesAndErrors(ctx, pkgOpts, args[:1])

View File

@ -840,7 +840,7 @@ func runTest(ctx context.Context, cmd *base.Command, args []string) {
b := work.NewBuilder("")
defer func() {
if err := b.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}()

View File

@ -98,7 +98,7 @@ func runVet(ctx context.Context, cmd *base.Command, args []string) {
b := work.NewBuilder("")
defer func() {
if err := b.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}()

View File

@ -344,7 +344,7 @@ func closeBuilders() {
builderWorkDirs.Range(func(bi, _ any) bool {
leakedBuilders++
if err := bi.(*Builder).Close(); err != nil {
base.Errorf("go: %v", err)
base.Error(err)
}
return true
})

View File

@ -459,7 +459,7 @@ func runBuild(ctx context.Context, cmd *base.Command, args []string) {
b := NewBuilder("")
defer func() {
if err := b.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}()
@ -779,7 +779,7 @@ func InstallPackages(ctx context.Context, patterns []string, pkgs []*load.Packag
b := NewBuilder("")
defer func() {
if err := b.Close(); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}()
@ -867,7 +867,7 @@ func installOutsideModule(ctx context.Context, args []string) {
pkgOpts := load.PackageOpts{MainOnly: true}
pkgs, err := load.PackagesAndErrorsOutsideModule(ctx, pkgOpts, args)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
load.CheckPackageErrors(pkgs)
patterns := make([]string, len(args))

View File

@ -37,7 +37,7 @@ func BuildInit() {
instrumentInit()
buildModeInit()
if err := fsys.Init(base.Cwd()); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
// Make sure -pkgdir is absolute, because we run commands

View File

@ -58,7 +58,7 @@ func runSync(ctx context.Context, cmd *base.Command, args []string) {
workGraph, err := modload.LoadModGraph(ctx, "")
if tooNew := (*gover.TooNewError)(nil); errors.As(err, &tooNew) {
toolchain.TryVersion(ctx, tooNew.GoVersion)
base.Fatalf("go: %v", err)
base.Fatal(err)
}
_ = workGraph
mustSelectFor := map[module.Version][]module.Version{}
@ -133,10 +133,10 @@ func runSync(ctx context.Context, cmd *base.Command, args []string) {
wf, err := modload.ReadWorkFile(workFilePath)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
modload.UpdateWorkFile(wf)
if err := modload.WriteWorkFile(workFilePath, wf); err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
}

View File

@ -59,7 +59,7 @@ func runUse(ctx context.Context, cmd *base.Command, args []string) {
}
workFile, err := modload.ReadWorkFile(gowork)
if err != nil {
base.Fatalf("go: %v", err)
base.Fatal(err)
}
workDir := filepath.Dir(gowork) // Absolute, since gowork itself is absolute.
@ -90,7 +90,7 @@ func runUse(ctx context.Context, cmd *base.Command, args []string) {
if os.IsNotExist(err) {
keepDirs[absDir] = ""
} else {
base.Errorf("go: %v", err)
base.Error(err)
}
return
}
@ -117,7 +117,7 @@ func runUse(ctx context.Context, cmd *base.Command, args []string) {
if os.IsNotExist(err) {
base.Errorf("go: directory %v does not exist", absArg)
} else {
base.Errorf("go: %v", err)
base.Error(err)
}
continue
} else if !info.IsDir() {

View File

@ -200,7 +200,7 @@ func invoke(cmd *base.Command, args []string) {
if cmd != envcmd.CmdEnv {
buildcfg.Check()
if cfg.ExperimentErr != nil {
base.Fatalf("go: %v", cfg.ExperimentErr)
base.Fatal(cfg.ExperimentErr)
}
}