"strings"
urlhelper "github.com/hashicorp/go-getter/helper/url"
+ "github.com/hashicorp/go-safetemp"
)
// Client is a client for downloading things.
dst := c.Dst
src, subDir := SourceDirSubdir(src)
if subDir != "" {
- tmpDir, err := ioutil.TempDir("", "tf")
+ td, tdcloser, err := safetemp.Dir("", "getter")
if err != nil {
return err
}
- if err := os.RemoveAll(tmpDir); err != nil {
- return err
- }
- defer os.RemoveAll(tmpDir)
+ defer tdcloser.Close()
realDst = dst
- dst = tmpDir
+ dst = td
}
u, err := urlhelper.Parse(src)
// Destination is the base name of the URL path in "any" mode when
// a file source is detected.
if mode == ClientModeFile {
- dst = filepath.Join(dst, filepath.Base(u.Path))
+ filename := filepath.Base(u.Path)
+
+ // Determine if we have a custom file name
+ if v := q.Get("filename"); v != "" {
+ // Delete the query parameter if we have it.
+ q.Del("filename")
+ u.RawQuery = q.Encode()
+
+ filename = v
+ }
+
+ dst = filepath.Join(dst, filename)
}
}
return err
}
- return copyDir(realDst, filepath.Join(dst, subDir), false)
+ // Process any globs
+ subDir, err := SubdirGlob(dst, subDir)
+ if err != nil {
+ return err
+ }
+
+ return copyDir(realDst, subDir, false)
}
return nil