diff options
author | Bryan C. Mills <bcmills@google.com> | 2019-06-04 16:50:59 -0400 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2019-06-05 15:58:13 +0000 |
commit | a0787f7bcc210e3f9dd725807cfa12895f90f29b (patch) | |
tree | 3c626be6a3ac1faa2592e55929862ec1c4a8c7e0 /src/cmd/go/internal/modfetch/fetch.go | |
parent | bf1f4ec7fa3938e1ce1297b367c16aea30280697 (diff) | |
download | go-a0787f7bcc210e3f9dd725807cfa12895f90f29b.tar.gz go-a0787f7bcc210e3f9dd725807cfa12895f90f29b.zip |
cmd/go: replace uses of ioutil.ReadFile with renameio.ReadFile
Windows does not have atomic renames; instead, it produces one of a
handful of errors in case a read races with a rename.
CL 180219 added a utility function that retries those errors in most
cases; this change updates the locations that use renameio for writes
to also use the new renameio.ReadFile function for reads.
It remains possible for a renameio.ReadFile to fail with a spurious
ERROR_FILE_NOT_FOUND, but with retries in place for the other errors
(and practical limits on write concurrency) such failures are unlikely
in practice.
Fixes #32188
Change-Id: I78c81051cc871325c1e3229e696b921b0fcd865a
Reviewed-on: https://go-review.googlesource.com/c/go/+/180517
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src/cmd/go/internal/modfetch/fetch.go')
-rw-r--r-- | src/cmd/go/internal/modfetch/fetch.go | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go index 3b2c68b281..94cb0d3a19 100644 --- a/src/cmd/go/internal/modfetch/fetch.go +++ b/src/cmd/go/internal/modfetch/fetch.go @@ -293,7 +293,7 @@ func initGoSum() bool { goSum.m = make(map[module.Version][]string) goSum.checked = make(map[modSum]bool) - data, err := ioutil.ReadFile(GoSumFile) + data, err := renameio.ReadFile(GoSumFile) if err != nil && !os.IsNotExist(err) { base.Fatalf("go: %v", err) } @@ -303,7 +303,7 @@ func initGoSum() bool { // Add old go.modverify file. // We'll delete go.modverify in WriteGoSum. alt := strings.TrimSuffix(GoSumFile, ".sum") + ".modverify" - if data, err := ioutil.ReadFile(alt); err == nil { + if data, err := renameio.ReadFile(alt); err == nil { migrate := make(map[module.Version][]string) readGoSum(migrate, alt, data) for mod, sums := range migrate { @@ -363,7 +363,7 @@ func checkMod(mod module.Version) { if err != nil { base.Fatalf("verifying %s@%s: %v", mod.Path, mod.Version, err) } - data, err := ioutil.ReadFile(ziphash) + data, err := renameio.ReadFile(ziphash) if err != nil { if os.IsNotExist(err) { // This can happen if someone does rm -rf GOPATH/src/cache/download. So it goes. @@ -490,7 +490,7 @@ func Sum(mod module.Version) string { if err != nil { return "" } - data, err := ioutil.ReadFile(ziphash) + data, err := renameio.ReadFile(ziphash) if err != nil { return "" } @@ -538,7 +538,7 @@ func WriteGoSum() { if !goSum.overwrite { // Re-read the go.sum file to incorporate any sums added by other processes // in the meantime. - data, err := ioutil.ReadFile(GoSumFile) + data, err := renameio.ReadFile(GoSumFile) if err != nil && !os.IsNotExist(err) { base.Fatalf("go: re-reading go.sum: %v", err) } |