diff options
author | Jay Conrod <jayconrod@google.com> | 2020-02-25 14:54:18 -0500 |
---|---|---|
committer | Jay Conrod <jayconrod@google.com> | 2020-02-26 15:38:51 +0000 |
commit | bb644e7982b7a669f67eb680c14ddd290f7bc237 (patch) | |
tree | ebc9322890ccf0d90d427df0b6723e64c1cce7b7 /src/cmd/go/internal/modfetch/fetch.go | |
parent | ee46f135a92c982d1dfcfd742729df372d70a69c (diff) | |
download | go-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.go | 6 |
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 } |