Merge pull request #16099 from hashicorp/jbardin/update-go-getter
update go-getter
This commit is contained in:
commit
4789045911
|
@ -21,8 +21,7 @@ URLs. For example: "github.com/hashicorp/go-getter" would turn into a
|
|||
Git URL. Or "./foo" would turn into a file URL. These are extensible.
|
||||
|
||||
This library is used by [Terraform](https://terraform.io) for
|
||||
downloading modules, [Otto](https://ottoproject.io) for dependencies and
|
||||
Appfile imports, and [Nomad](https://nomadproject.io) for downloading
|
||||
downloading modules and [Nomad](https://nomadproject.io) for downloading
|
||||
binaries.
|
||||
|
||||
## Installation and Usage
|
||||
|
|
|
@ -32,7 +32,7 @@ func (d *FileDetector) Detect(src, pwd string) (string, bool, error) {
|
|||
return "", true, err
|
||||
}
|
||||
if fi.Mode()&os.ModeSymlink != 0 {
|
||||
pwd, err = os.Readlink(pwd)
|
||||
pwd, err = filepath.EvalSymlinks(pwd)
|
||||
if err != nil {
|
||||
return "", true, err
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@ import (
|
|||
"os/exec"
|
||||
"regexp"
|
||||
"syscall"
|
||||
|
||||
cleanhttp "github.com/hashicorp/go-cleanhttp"
|
||||
)
|
||||
|
||||
// Getter defines the interface that schemes must implement to download
|
||||
|
@ -49,8 +51,13 @@ var Getters map[string]Getter
|
|||
// syntax is schema::url, example: git::https://foo.com
|
||||
var forcedRegexp = regexp.MustCompile(`^([A-Za-z0-9]+)::(.+)$`)
|
||||
|
||||
// httpClient is the default client to be used by HttpGetters.
|
||||
var httpClient = cleanhttp.DefaultClient()
|
||||
|
||||
func init() {
|
||||
httpGetter := &HttpGetter{Netrc: true}
|
||||
httpGetter := &HttpGetter{
|
||||
Netrc: true,
|
||||
}
|
||||
|
||||
Getters = map[string]Getter{
|
||||
"file": new(FileGetter),
|
||||
|
|
|
@ -180,17 +180,34 @@ func (g *GitGetter) fetchSubmodules(dst, sshKeyFile string) error {
|
|||
// setupGitEnv sets up the environment for the given command. This is used to
|
||||
// pass configuration data to git and ssh and enables advanced cloning methods.
|
||||
func setupGitEnv(cmd *exec.Cmd, sshKeyFile string) {
|
||||
var sshOpts []string
|
||||
const gitSSHCommand = "GIT_SSH_COMMAND="
|
||||
var sshCmd []string
|
||||
|
||||
// If we have an existing GIT_SSH_COMMAND, we need to append our options.
|
||||
// We will also remove our old entry to make sure the behavior is the same
|
||||
// with versions of Go < 1.9.
|
||||
env := os.Environ()
|
||||
for i, v := range env {
|
||||
if strings.HasPrefix(v, gitSSHCommand) {
|
||||
sshCmd = []string{v}
|
||||
|
||||
env[i], env[len(env)-1] = env[len(env)-1], env[i]
|
||||
env = env[:len(env)-1]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if len(sshCmd) == 0 {
|
||||
sshCmd = []string{gitSSHCommand + "ssh"}
|
||||
}
|
||||
|
||||
if sshKeyFile != "" {
|
||||
// We have an SSH key temp file configured, tell ssh about this.
|
||||
sshOpts = append(sshOpts, "-i", sshKeyFile)
|
||||
sshCmd = append(sshCmd, "-i", sshKeyFile)
|
||||
}
|
||||
|
||||
cmd.Env = append(os.Environ(),
|
||||
// Set the ssh command to use for clones.
|
||||
"GIT_SSH_COMMAND=ssh "+strings.Join(sshOpts, " "),
|
||||
)
|
||||
env = append(env, strings.Join(sshCmd, " "))
|
||||
cmd.Env = env
|
||||
}
|
||||
|
||||
// checkGitVersion is used to check the version of git installed on the system
|
||||
|
|
|
@ -36,6 +36,10 @@ type HttpGetter struct {
|
|||
// Netrc, if true, will lookup and use auth information found
|
||||
// in the user's netrc file if available.
|
||||
Netrc bool
|
||||
|
||||
// Client is the http.Client to use for Get requests.
|
||||
// This defaults to a cleanhttp.DefaultClient if left unset.
|
||||
Client *http.Client
|
||||
}
|
||||
|
||||
func (g *HttpGetter) ClientMode(u *url.URL) (ClientMode, error) {
|
||||
|
@ -57,13 +61,17 @@ func (g *HttpGetter) Get(dst string, u *url.URL) error {
|
|||
}
|
||||
}
|
||||
|
||||
if g.Client == nil {
|
||||
g.Client = httpClient
|
||||
}
|
||||
|
||||
// Add terraform-get to the parameter.
|
||||
q := u.Query()
|
||||
q.Add("terraform-get", "1")
|
||||
u.RawQuery = q.Encode()
|
||||
|
||||
// Get the URL
|
||||
resp, err := http.Get(u.String())
|
||||
resp, err := g.Client.Get(u.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -105,7 +113,11 @@ func (g *HttpGetter) GetFile(dst string, u *url.URL) error {
|
|||
}
|
||||
}
|
||||
|
||||
resp, err := http.Get(u.String())
|
||||
if g.Client == nil {
|
||||
g.Client = httpClient
|
||||
}
|
||||
|
||||
resp, err := g.Client.Get(u.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -1366,16 +1366,20 @@
|
|||
"revisionTime": "2017-02-11T01:34:15Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "cw5fzHNCbc3zVjNRnP1pm5tt5rk=",
|
||||
"checksumSHA1": "7SY5eTKPGF0BjyByXfKhZAAqnKc=",
|
||||
"path": "github.com/hashicorp/go-getter",
|
||||
"revision": "ee320eed76420de7fa4395de568552c63fe9115e",
|
||||
"revisionTime": "2017-09-05T20:45:58Z"
|
||||
"revision": "56c651a79a6eec93e6ef074fe9e57fefb26b8b85",
|
||||
"revisionTime": "2017-09-14T15:44:44Z",
|
||||
"version": "master",
|
||||
"versionExact": "master"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "9J+kDr29yDrwsdu2ULzewmqGjpA=",
|
||||
"path": "github.com/hashicorp/go-getter/helper/url",
|
||||
"revision": "6aae8e4e2dee8131187c6a54b52664796e5a02b0",
|
||||
"revisionTime": "2017-07-13T01:23:01Z"
|
||||
"revision": "56c651a79a6eec93e6ef074fe9e57fefb26b8b85",
|
||||
"revisionTime": "2017-09-14T15:44:44Z",
|
||||
"version": "master",
|
||||
"versionExact": "master"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "miVF4/7JP0lRwZvFJGKwZWk7aAQ=",
|
||||
|
|
Loading…
Reference in New Issue