aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2023-04-06 18:40:51 +0000
committerHeschi Kreinick <heschi@google.com>2023-11-07 20:45:57 +0000
commite1dc209be86b10ce0d61619afb01d995dfded440 (patch)
treea2b27f0e8a51b18130e85d1d5a7416de912a3b32
parent1d0d4b149ce71083ec474d0491851ab2d2dc695e (diff)
downloadgo-e1dc209be86b10ce0d61619afb01d995dfded440.tar.gz
go-e1dc209be86b10ce0d61619afb01d995dfded440.zip
[release-branch.go1.20] cmd/go/internal/modfetch/codehost: set core.longpaths in Git repos on Windows
This setting appears to be needed to avoid “Filename too long” errors when downloading modules from repos with long branch names, particularly if the path to the module cache is already fairly long (as may be the case in CI systems and in tests of cmd/go itself). Fixes #63988. Change-Id: I3aa89ea872b29eb0460c8a8afc94f182a68982fd Reviewed-on: https://go-review.googlesource.com/c/go/+/482819 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> (cherry picked from commit 0c89487b1d9bac744091a5ff2a09541c71b66b85) Reviewed-on: https://go-review.googlesource.com/c/go/+/539278 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
-rw-r--r--src/cmd/go/internal/modfetch/codehost/git.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/cmd/go/internal/modfetch/codehost/git.go b/src/cmd/go/internal/modfetch/codehost/git.go
index 127ad264af..8bfbe7b652 100644
--- a/src/cmd/go/internal/modfetch/codehost/git.go
+++ b/src/cmd/go/internal/modfetch/codehost/git.go
@@ -16,6 +16,7 @@ import (
"os"
"os/exec"
"path/filepath"
+ "runtime"
"sort"
"strconv"
"strings"
@@ -95,6 +96,21 @@ func newGitRepo(remote string, localOK bool) (Repo, error) {
os.RemoveAll(r.dir)
return nil, err
}
+ if runtime.GOOS == "windows" {
+ // Git for Windows by default does not support paths longer than
+ // MAX_PATH (260 characters) because that may interfere with navigation
+ // in some Windows programs. However, cmd/go should be able to handle
+ // long paths just fine, and we expect people to use 'go clean' to
+ // manipulate the module cache, so it should be harmless to set here,
+ // and in some cases may be necessary in order to download modules with
+ // long branch names.
+ //
+ // See https://github.com/git-for-windows/git/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path.
+ if _, err := Run(r.dir, "git", "config", "core.longpaths", "true"); err != nil {
+ os.RemoveAll(r.dir)
+ return nil, err
+ }
+ }
}
r.remoteURL = r.remote
r.remote = "origin"