From 9e01b5a4787507f7015bfb6225e01da7159570f0 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 15 Aug 2013 20:16:05 -0700 Subject: [PATCH] common: detect drive letter with windows file URLs [GH-284] --- CHANGELOG.md | 2 ++ common/config.go | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10af0427a..b7f5c2d57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,8 @@ IMPROVEMENTS: BUG FIXES: +* windows: file URLs are easier to get right as Packer + has better parsing and error handling for Windows file paths. [GH-284] * builder/amazon-instance: send IAM instance profile data. [GH-294] * builder/virtualbox: dowload progress won't be shown until download actually starts. [GH-288] diff --git a/common/config.go b/common/config.go index 16ab86252..2a2c8b21f 100644 --- a/common/config.go +++ b/common/config.go @@ -64,6 +64,15 @@ func DecodeConfig(target interface{}, raws ...interface{}) (*mapstructure.Metada // a completely valid URL. For example, the original URL might be "local/file.iso" // which isn't a valid URL. DownloadableURL will return "file:///local/file.iso" func DownloadableURL(original string) (string, error) { + if runtime.GOOS == "windows" { + // If the distance to the first ":" is just one character, assume + // we're dealing with a drive letter and thus a file path. + idx := strings.Index(original, ":") + if idx == 1 { + original = "file:///" + original + } + } + url, err := url.Parse(original) if err != nil { return "", err