diff --git a/common/config.go b/common/config.go index 94b03e2b1..12c53cc25 100644 --- a/common/config.go +++ b/common/config.go @@ -7,6 +7,7 @@ import ( "net/url" "os" "path/filepath" + "runtime" "sort" "strings" ) @@ -73,6 +74,12 @@ func DownloadableURL(original string) (string, error) { } if url.Scheme == "file" { + // For Windows absolute file paths, remove leading / + // prior to processing + if runtime.GOOS == "windows" && url.Path[0] == '/' { + url.Path = url.Path[1:len(url.Path)] + } + if _, err := os.Stat(url.Path); err != nil { return "", err } diff --git a/common/download.go b/common/download.go index eaf2f22d5..4e93b37ec 100644 --- a/common/download.go +++ b/common/download.go @@ -14,6 +14,7 @@ import ( "net/http" "net/url" "os" + "runtime" ) // DownloadConfig is the configuration given to instantiate a new @@ -106,7 +107,13 @@ func (d *DownloadClient) Get() (string, error) { // Files when we don't copy the file are special cased. var finalPath string if url.Scheme == "file" && !d.config.CopyFile { - finalPath = url.Path + // Remove forward slash on absolute Windows file URLs + // Before processing + if runtime.GOOS == "windows" && url.Path[0] == '/' { + finalPath = url.Path[1:len(url.Path)] + } else { + finalPath = url.Path + } } else { finalPath = d.config.TargetPath