builder/common: make rel path absolute in DownloadableURL [GH-215]
This commit is contained in:
parent
1ebb1b7ef6
commit
ac8548d998
|
@ -2,6 +2,7 @@ package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
"github.com/mitchellh/mapstructure"
|
"github.com/mitchellh/mapstructure"
|
||||||
"github.com/mitchellh/packer/packer"
|
"github.com/mitchellh/packer/packer"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
@ -75,6 +76,18 @@ func DownloadableURL(original string) (string, error) {
|
||||||
if _, err := os.Stat(url.Path); err != nil {
|
if _, err := os.Stat(url.Path); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
url.Path, err = filepath.Abs(url.Path)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
url.Path, err = filepath.EvalSymlinks(url.Path)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
url.Path = filepath.Clean(url.Path)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure it is lowercased
|
// Make sure it is lowercased
|
||||||
|
|
|
@ -98,6 +98,13 @@ func TestDownloadableURL_FilePaths(t *testing.T) {
|
||||||
defer os.Remove(tf.Name())
|
defer os.Remove(tf.Name())
|
||||||
tf.Close()
|
tf.Close()
|
||||||
|
|
||||||
|
tfPath, err := filepath.EvalSymlinks(tf.Name())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("tempfile err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tfPath = filepath.Clean(tfPath)
|
||||||
|
|
||||||
// Relative filepath. We run this test in a func so that
|
// Relative filepath. We run this test in a func so that
|
||||||
// the defers run right away.
|
// the defers run right away.
|
||||||
func() {
|
func() {
|
||||||
|
@ -106,19 +113,19 @@ func TestDownloadableURL_FilePaths(t *testing.T) {
|
||||||
t.Fatalf("getwd err: %s", err)
|
t.Fatalf("getwd err: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = os.Chdir(filepath.Dir(tf.Name()))
|
err = os.Chdir(filepath.Dir(tfPath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("chdir err: %s", err)
|
t.Fatalf("chdir err: %s", err)
|
||||||
}
|
}
|
||||||
defer os.Chdir(wd)
|
defer os.Chdir(wd)
|
||||||
|
|
||||||
filename := filepath.Base(tf.Name())
|
filename := filepath.Base(tfPath)
|
||||||
u, err := DownloadableURL(filename)
|
u, err := DownloadableURL(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("err: %s", err)
|
t.Fatalf("err: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if u != fmt.Sprintf("file:///%s", filename) {
|
if u != fmt.Sprintf("file://%s", tfPath) {
|
||||||
t.Fatalf("unexpected: %s", u)
|
t.Fatalf("unexpected: %s", u)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -132,12 +139,12 @@ func TestDownloadableURL_FilePaths(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Good file
|
// Good file
|
||||||
u, err := DownloadableURL(prefix + tf.Name())
|
u, err := DownloadableURL(prefix + tfPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("err: %s", err)
|
t.Fatalf("err: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if u != fmt.Sprintf("file://%s", tf.Name()) {
|
if u != fmt.Sprintf("file://%s", tfPath) {
|
||||||
t.Fatalf("unexpected: %s", u)
|
t.Fatalf("unexpected: %s", u)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue