From da360f30e90fe1a2766f8748b65c17fbffa25392 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 24 Oct 2017 07:22:26 -0700 Subject: [PATCH] cmd/go: always copy files on Windows Copying ensures that we respect the NTFS permissions of the parent folder. I don't know if there is a way to tell when it is safe to simply rename. Fixes #22343 Change-Id: I424bfe655b53b0e0fe425ce92bbc15450d52d851 Reviewed-on: https://go-review.googlesource.com/72910 Run-TryBot: Ian Lance Taylor Reviewed-by: Alex Brainman --- src/cmd/go/internal/work/exec.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go index 405abc4323..c17e529551 100644 --- a/src/cmd/go/internal/work/exec.go +++ b/src/cmd/go/internal/work/exec.go @@ -18,6 +18,7 @@ import ( "os/exec" "path/filepath" "regexp" + "runtime" "strconv" "strings" "sync" @@ -1065,6 +1066,14 @@ func (b *Builder) moveOrCopyFile(a *Action, dst, src string, perm os.FileMode, f return b.copyFile(a, dst, src, perm, force) } + // On Windows, always copy the file, so that we respect the NTFS + // permissions of the parent folder. https://golang.org/issue/22343. + // What matters here is not cfg.Goos (the system we are building + // for) but runtime.GOOS (the system we are building on). + if runtime.GOOS == "windows" { + return b.copyFile(a, dst, src, perm, force) + } + // If the destination directory has the group sticky bit set, // we have to copy the file to retain the correct permissions. // https://golang.org/issue/18878