aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/modfetch/fetch.go
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2019-06-04 16:50:59 -0400
committerBryan C. Mills <bcmills@google.com>2019-06-05 15:58:13 +0000
commita0787f7bcc210e3f9dd725807cfa12895f90f29b (patch)
tree3c626be6a3ac1faa2592e55929862ec1c4a8c7e0 /src/cmd/go/internal/modfetch/fetch.go
parentbf1f4ec7fa3938e1ce1297b367c16aea30280697 (diff)
downloadgo-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.go10
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)
}