aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/modfetch/fetch.go
diff options
context:
space:
mode:
authorJay Conrod <jayconrod@google.com>2020-02-25 14:54:18 -0500
committerJay Conrod <jayconrod@google.com>2020-02-26 15:38:51 +0000
commitbb644e7982b7a669f67eb680c14ddd290f7bc237 (patch)
treeebc9322890ccf0d90d427df0b6723e64c1cce7b7 /src/cmd/go/internal/modfetch/fetch.go
parentee46f135a92c982d1dfcfd742729df372d70a69c (diff)
downloadgo-bb644e7982b7a669f67eb680c14ddd290f7bc237.tar.gz
go-bb644e7982b7a669f67eb680c14ddd290f7bc237.zip
cmd/go/internal/modfetch: retry rename for unzipped directories
No test because this is difficult to reproduce, and such a test would always be flaky. Updates #36568 Change-Id: I8170410a7729ecc6f90baf8005444d6b1241185e Reviewed-on: https://go-review.googlesource.com/c/go/+/220978 Run-TryBot: Jay Conrod <jayconrod@google.com> Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Michael Matloob <matloob@golang.org>
Diffstat (limited to 'src/cmd/go/internal/modfetch/fetch.go')
-rw-r--r--src/cmd/go/internal/modfetch/fetch.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go
index 54fbd92b43..e2c463a685 100644
--- a/src/cmd/go/internal/modfetch/fetch.go
+++ b/src/cmd/go/internal/modfetch/fetch.go
@@ -22,6 +22,7 @@ import (
"cmd/go/internal/lockedfile"
"cmd/go/internal/par"
"cmd/go/internal/renameio"
+ "cmd/go/internal/robustio"
"golang.org/x/mod/module"
"golang.org/x/mod/sumdb/dirhash"
@@ -101,6 +102,9 @@ func download(mod module.Version, dir string) (err error) {
// signal that it has been extracted successfully, and if someone deletes
// the entire directory (e.g. as an attempt to prune out file corruption)
// the module cache will still be left in a recoverable state.
+ // We retry failed renames using robustio.Rename on Windows. Programs that
+ // open files in the temporary directory (antivirus, search indexers, etc.)
+ // can cause os.Rename to fail with ERROR_ACCESS_DENIED.
if err := os.MkdirAll(parentDir, 0777); err != nil {
return err
}
@@ -119,7 +123,7 @@ func download(mod module.Version, dir string) (err error) {
return err
}
- if err := os.Rename(tmpDir, dir); err != nil {
+ if err := robustio.Rename(tmpDir, dir); err != nil {
return err
}