]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/go: add base.Error and base.Fatal
authorRuss Cox <rsc@golang.org>
Thu, 1 Jun 2023 17:25:56 +0000 (13:25 -0400)
committerGopher Robot <gobot@golang.org>
Thu, 1 Jun 2023 21:32:23 +0000 (21:32 +0000)
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>
27 files changed:
src/cmd/go/internal/base/base.go
src/cmd/go/internal/clean/clean.go
src/cmd/go/internal/envcmd/env.go
src/cmd/go/internal/list/list.go
src/cmd/go/internal/load/pkg.go
src/cmd/go/internal/modcmd/download.go
src/cmd/go/internal/modcmd/edit.go
src/cmd/go/internal/modcmd/graph.go
src/cmd/go/internal/modcmd/vendor.go
src/cmd/go/internal/modcmd/verify.go
src/cmd/go/internal/modcmd/why.go
src/cmd/go/internal/modfetch/fetch.go
src/cmd/go/internal/modget/get.go
src/cmd/go/internal/modload/build.go
src/cmd/go/internal/modload/buildlist.go
src/cmd/go/internal/modload/init.go
src/cmd/go/internal/modload/load.go
src/cmd/go/internal/modload/vendor.go
src/cmd/go/internal/run/run.go
src/cmd/go/internal/test/test.go
src/cmd/go/internal/vet/vet.go
src/cmd/go/internal/work/action.go
src/cmd/go/internal/work/build.go
src/cmd/go/internal/work/init.go
src/cmd/go/internal/workcmd/sync.go
src/cmd/go/internal/workcmd/use.go
src/cmd/go/main.go

index d4af4dbc4b0ff3879df1b48a59e826b39723ab0b..f3774ae2f0814e1bf7d5a5be3bbb429bc1536f5e 100644 (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
 
index 368288f0fc692a1fca9e5d94c7f0fab78730b258..e0112379c0034e2350fcf411cc940be87dfaa5f4 100644 (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)
 }
index 02a5343362fc9ba5764a92c6348dbe4edf3cda42..c7c2e83e0f7a9ec9f69c66f002cfb420644a3623 100644 (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)
index 4a45a2157d4ff9a7f9d808e4da69301f6b884f99..2427b022a1cb2da414da9eaeb6fdb7b42c9bca2a 100644 (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]
index a66df86f5cc286120867935a3f1c5ea1f36b0e30..65af063059d95fe01139abe96f718322d635e50f 100644 (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)
index 2fa85e0e219d9cba465ad16a0a05c2b1d387f697..e49cd9fe0c1c5c04242abbcef7cb5c5cd126d472 100644 (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)
        }
 }
 
index bd22649172a53ec8c29c87868348391c3fec9087..96bd608c01cdf87f0edb1920e5536b20039ebd59 100644 (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)
        }
 }
 
index 0265a0074c405a61d332ac208633f59cd23215b1..eb9e314fc4da30edb45ab834258ef72a18ec8ebe 100644 (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)
index 8f23ae354638a558a14cbd4f8035494798939da7..1a0d69eca205203ae4b8e4b11d308ea31679d9d3 100644 (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)
                }
        }
 }
index 3bc6c5a1409225169df77148e028e0af8bff2d08..4552ed1ba279ab8ec1ce132c3fd25508c2ddbac9 100644 (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.
index 729c88f3f12f1b94db357a5421749752e9ef5993..198672d8064113267fe9846c0a0f69befe8e3bc9 100644 (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)
index 0eeb3bf190602b1cf61a9e05641f6c77339c3b92..42796866addfff3236b98596cb2c603f7d1e581c 100644 (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.
index 33b9d6b14f99dc343969c09d98cdbb28787c66ee..0cf3c1dc84315feddab53e9bae76aaacf69569b6 100644 (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()
index b63ea4842891a22c35cf91c93fc9ae90b183d51d..bb513ea938f6cd6cdd1a0727839ca21c6399be7f 100644 (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)
        }
index dd8e46eaad8fe89cb62f30933d7dd7c979df7884..d71962dd6bd99e1d7b60dd2aa2ae312097939e5b 100644 (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
index e1d251204d96726475584d064f0e414afceb0054..737aaa910631f1a54210a74c6a8290b50d7c1473 100644 (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
index 8f1eb1098bd4e53f984017cbd1da8d5ac43a0db5..0a06b1b1253dcb0b80573ec4c92ca8783a735809 100644 (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)
                }
        }
 }
index 4bc0dd5725ecb8e5580beea49746596526af5b94..ffc79bb93fd98da0e9f864d8b8b2b4768c7711b1 100644 (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.
index 137ee1d633af99998c248c2a39f468ec117f9d6e..4a3dcf0f1a8ee2b8b0266da2b5f54f2bf9d1a05c 100644 (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])
index 95391c58c7e92f98ee0dc27e5eca7c09edb572a9..cb8cb8370133b7b7da473ef12e575db239d301f6 100644 (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)
                }
        }()
 
index c73fa5b424fd0f5f9bdff08bd39d98315719bdd6..f59994c7c93a9e450e7772fd868b9f24179f9578 100644 (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)
                }
        }()
 
index de59c09d1abbf7a3bee276122879955cb1ae9acf..0fc85da0066415cd2df9c29895b3bccab2362da5 100644 (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
        })
index 552cc2a6d4765ecac2929b53f3c76445be650037..e39e499930ce72f90368d05ae845d3e4ec793e9b 100644 (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))
index 0750351133d2e76c0ea7451eeb86d3e2570d0ee5..29116cb90ceb490e7d115bce086f5edbdbe361b8 100644 (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
index 1d57a36dbc03b74a4f8eed879aff56ccc4e4bd43..2bf76caae5f20e3ec73c1a0a92fad00d127d4791 100644 (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)
        }
 }
index 71f38e2e30c788eaa77e3a2ff98f9d26f60e0f35..327028e1d6b6445b8e1948e1f3ab641086694d41 100644 (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() {
index 03ac15a37d9335840d88070b9f8f346f918b1915..af13f01240c3feaba9d82cbaa23a7728d50b8fe9 100644 (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)
                }
        }