Commit 41d1bf0e authored by Jay Conrod's avatar Jay Conrod

cmd/go/internal/modfetch: workaround file URL parsing on Windows

Remove the leading slash from GOPROXY file:// URLs.

Updates #31675

Change-Id: Id45af2a806afc3c216181c13f6bc73713b925693
Reviewed-on: https://go-review.googlesource.com/c/go/+/173499
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Cottrell <iancottrell@google.com>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent f30c5645
...@@ -14,9 +14,11 @@ import ( ...@@ -14,9 +14,11 @@ import (
"os" "os"
pathpkg "path" pathpkg "path"
"path/filepath" "path/filepath"
"runtime"
"strings" "strings"
"sync" "sync"
"time" "time"
"unicode"
"cmd/go/internal/base" "cmd/go/internal/base"
"cmd/go/internal/cfg" "cmd/go/internal/cfg"
...@@ -219,6 +221,11 @@ func (p *proxyRepo) getBody(path string) (io.ReadCloser, error) { ...@@ -219,6 +221,11 @@ func (p *proxyRepo) getBody(path string) (io.ReadCloser, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if runtime.GOOS == "windows" && len(rawPath) >= 4 && rawPath[0] == '/' && unicode.IsLetter(rune(rawPath[1])) && rawPath[2] == ':' {
// On Windows, file URLs look like "file:///C:/foo/bar". url.Path will
// start with a slash which must be removed. See golang.org/issue/6027.
rawPath = rawPath[1:]
}
return os.Open(filepath.FromSlash(rawPath)) return os.Open(filepath.FromSlash(rawPath))
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment