Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.0.1-2020.1.5 / internal / robustio / robustio.go
1 // Copyright 2019 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // Package robustio wraps I/O functions that are prone to failure on Windows,
6 // transparently retrying errors up to an arbitrary timeout.
7 //
8 // Errors are classified heuristically and retries are bounded, so the functions
9 // in this package do not completely eliminate spurious errors. However, they do
10 // significantly reduce the rate of failure in practice.
11 //
12 // If so, the error will likely wrap one of:
13 // The functions in this package do not completely eliminate spurious errors,
14 // but substantially reduce their rate of occurrence in practice.
15 package robustio
16
17 // Rename is like os.Rename, but on Windows retries errors that may occur if the
18 // file is concurrently read or overwritten.
19 //
20 // (See golang.org/issue/31247 and golang.org/issue/32188.)
21 func Rename(oldpath, newpath string) error {
22         return rename(oldpath, newpath)
23 }
24
25 // ReadFile is like ioutil.ReadFile, but on Windows retries errors that may
26 // occur if the file is concurrently replaced.
27 //
28 // (See golang.org/issue/31247 and golang.org/issue/32188.)
29 func ReadFile(filename string) ([]byte, error) {
30         return readFile(filename)
31 }
32
33 // RemoveAll is like os.RemoveAll, but on Windows retries errors that may occur
34 // if an executable file in the directory has recently been executed.
35 //
36 // (See golang.org/issue/19491.)
37 func RemoveAll(path string) error {
38         return removeAll(path)
39 }
40
41 // IsEphemeralError reports whether err is one of the errors that the functions
42 // in this package attempt to mitigate.
43 //
44 // Errors considered ephemeral include:
45 //      - syscall.ERROR_ACCESS_DENIED
46 //      - syscall.ERROR_FILE_NOT_FOUND
47 //      - internal/syscall/windows.ERROR_SHARING_VIOLATION
48 //
49 // This set may be expanded in the future; programs must not rely on the
50 // non-ephemerality of any given error.
51 func IsEphemeralError(err error) bool {
52         return isEphemeralError(err)
53 }