vendor: update go-getter
This commit is contained in:
parent
f1f20a3a58
commit
997f2b332b
|
@ -1,10 +0,0 @@
|
||||||
sudo: false
|
|
||||||
|
|
||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.5
|
|
||||||
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- master
|
|
|
@ -102,6 +102,23 @@ In the absense of a forced protocol, detectors may be run on the URL, transformi
|
||||||
the protocol anyways. The above example would've used the Git protocol either
|
the protocol anyways. The above example would've used the Git protocol either
|
||||||
way since the Git detector would've detected it was a GitHub URL.
|
way since the Git detector would've detected it was a GitHub URL.
|
||||||
|
|
||||||
|
### Protocol-Specific Options
|
||||||
|
|
||||||
|
Each protocol can support protocol-specific options to configure that
|
||||||
|
protocol. For example, the `git` protocol supports specifying a `ref`
|
||||||
|
query parameter that tells it what ref to checkout for that Git
|
||||||
|
repository.
|
||||||
|
|
||||||
|
The options are specified as query parameters on the URL (or URL-like string)
|
||||||
|
given to go-getter. Using the Git example above, the URL below is a valid
|
||||||
|
input to go-getter:
|
||||||
|
|
||||||
|
github.com/hashicorp/go-getter?ref=abcd1234
|
||||||
|
|
||||||
|
The protocol-specific options are documented below the URL format
|
||||||
|
section. But because they are part of the URL, we point it out here so
|
||||||
|
you know they exist.
|
||||||
|
|
||||||
### Checksumming
|
### Checksumming
|
||||||
|
|
||||||
For file downloads of any protocol, go-getter can automatically verify
|
For file downloads of any protocol, go-getter can automatically verify
|
||||||
|
@ -163,3 +180,68 @@ And finally, you can disable archiving completely:
|
||||||
You can combine unarchiving with the other features of go-getter such
|
You can combine unarchiving with the other features of go-getter such
|
||||||
as checksumming. The special `archive` query parameter will be removed
|
as checksumming. The special `archive` query parameter will be removed
|
||||||
from the URL before going to the final protocol downloader.
|
from the URL before going to the final protocol downloader.
|
||||||
|
|
||||||
|
## Protocol-Specific Options
|
||||||
|
|
||||||
|
This section documents the protocol-specific options that can be specified
|
||||||
|
for go-getter. These options should be appended to the input as normal query
|
||||||
|
parameters. Depending on the usage of go-getter, applications may provide
|
||||||
|
alternate ways of inputting options. For example, [Nomad](https://www.nomadproject.io)
|
||||||
|
provides a nice options block for specifying options rather than in the URL.
|
||||||
|
|
||||||
|
## General (All Protocols)
|
||||||
|
|
||||||
|
The options below are available to all protocols:
|
||||||
|
|
||||||
|
* `archive` - The archive format to use to unarchive this file, or "" (empty
|
||||||
|
string) to disable unarchiving. For more details, see the complete section
|
||||||
|
on archive support above.
|
||||||
|
|
||||||
|
* `checksum` - Checksum to verify the downloaded file or archive. See
|
||||||
|
the entire section on checksumming above for format and more details.
|
||||||
|
|
||||||
|
### Local Files (`file`)
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
### Git (`git`)
|
||||||
|
|
||||||
|
* `ref` - The Git ref to checkout. This is a ref, so it can point to
|
||||||
|
a commit SHA, a branch name, etc. If it is a named ref such as a branch
|
||||||
|
name, go-getter will update it to the latest on each get.
|
||||||
|
|
||||||
|
### Mercurial (`hg`)
|
||||||
|
|
||||||
|
* `rev` - The Mercurial revision to checkout.
|
||||||
|
|
||||||
|
### HTTP (`http`)
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
### S3 (`s3`)
|
||||||
|
|
||||||
|
S3 takes various access configurations in the URL. Note that it will also
|
||||||
|
read these from standard AWS environment variables if they're set. If
|
||||||
|
the query parameters are present, these take priority.
|
||||||
|
|
||||||
|
* `aws_access_key_id` - AWS access key.
|
||||||
|
* `aws_access_key_secret` - AWS access key secret.
|
||||||
|
* `aws_access_token` - AWS access token if this is being used.
|
||||||
|
|
||||||
|
#### Using IAM Instance Profiles with S3
|
||||||
|
|
||||||
|
If you use go-getter and want to use an EC2 IAM Instance Profile to avoid
|
||||||
|
using credentials, then just omit these and the profile, if available will
|
||||||
|
be used automatically.
|
||||||
|
|
||||||
|
#### S3 Bucket Examples
|
||||||
|
|
||||||
|
S3 has several addressing schemes used to reference your bucket. These are
|
||||||
|
listed here: http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro
|
||||||
|
|
||||||
|
Some examples for these addressing schemes:
|
||||||
|
- s3::https://s3.amazonaws.com/bucket/foo
|
||||||
|
- s3::https://s3-eu-west-1.amazonaws.com/bucket/foo
|
||||||
|
- bucket.s3.amazonaws.com/foo
|
||||||
|
- bucket.s3-eu-west-1.amazonaws.com/foo/bar
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"runtime"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -69,9 +70,16 @@ func TestDecompressor(t *testing.T, d Decompressor, cases []TestDecompressCase)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert expected for windows
|
||||||
|
expected := tc.DirList
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
for i, v := range expected {
|
||||||
|
expected[i] = strings.Replace(v, "/", "\\", -1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Directory, check for the correct contents
|
// Directory, check for the correct contents
|
||||||
actual := testListDir(t, dst)
|
actual := testListDir(t, dst)
|
||||||
expected := tc.DirList
|
|
||||||
if !reflect.DeepEqual(actual, expected) {
|
if !reflect.DeepEqual(actual, expected) {
|
||||||
t.Fatalf("bad %s\n\n%#v\n\n%#v", tc.Input, actual, expected)
|
t.Fatalf("bad %s\n\n%#v\n\n%#v", tc.Input, actual, expected)
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ func (d *ZipDecompressor) Decompress(dst, src string, dir bool) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if f.FileInfo().IsDir() {
|
if f.FileInfo().IsDir() {
|
||||||
if dir {
|
if !dir {
|
||||||
return fmt.Errorf("expected a single file: %s", src)
|
return fmt.Errorf("expected a single file: %s", src)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,15 @@ func (d *ZipDecompressor) Decompress(dst, src string, dir bool) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create the enclosing directories if we must. ZIP files aren't
|
||||||
|
// required to contain entries for just the directories so this
|
||||||
|
// can happen.
|
||||||
|
if dir {
|
||||||
|
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Open the file for reading
|
// Open the file for reading
|
||||||
srcF, err := f.Open()
|
srcF, err := f.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -11,8 +11,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (g *FileGetter) Get(dst string, u *url.URL) error {
|
func (g *FileGetter) Get(dst string, u *url.URL) error {
|
||||||
|
path := u.Path
|
||||||
|
if u.RawPath != "" {
|
||||||
|
path = u.RawPath
|
||||||
|
}
|
||||||
|
|
||||||
// The source path must exist and be a directory to be usable.
|
// The source path must exist and be a directory to be usable.
|
||||||
if fi, err := os.Stat(u.Path); err != nil {
|
if fi, err := os.Stat(path); err != nil {
|
||||||
return fmt.Errorf("source path error: %s", err)
|
return fmt.Errorf("source path error: %s", err)
|
||||||
} else if !fi.IsDir() {
|
} else if !fi.IsDir() {
|
||||||
return fmt.Errorf("source path must be a directory")
|
return fmt.Errorf("source path must be a directory")
|
||||||
|
@ -41,12 +46,17 @@ func (g *FileGetter) Get(dst string, u *url.URL) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return os.Symlink(u.Path, dst)
|
return os.Symlink(path, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *FileGetter) GetFile(dst string, u *url.URL) error {
|
func (g *FileGetter) GetFile(dst string, u *url.URL) error {
|
||||||
|
path := u.Path
|
||||||
|
if u.RawPath != "" {
|
||||||
|
path = u.RawPath
|
||||||
|
}
|
||||||
|
|
||||||
// The source path must exist and be a directory to be usable.
|
// The source path must exist and be a directory to be usable.
|
||||||
if fi, err := os.Stat(u.Path); err != nil {
|
if fi, err := os.Stat(path); err != nil {
|
||||||
return fmt.Errorf("source path error: %s", err)
|
return fmt.Errorf("source path error: %s", err)
|
||||||
} else if fi.IsDir() {
|
} else if fi.IsDir() {
|
||||||
return fmt.Errorf("source path must be a file")
|
return fmt.Errorf("source path must be a file")
|
||||||
|
@ -72,11 +82,11 @@ func (g *FileGetter) GetFile(dst string, u *url.URL) error {
|
||||||
|
|
||||||
// If we're not copying, just symlink and we're done
|
// If we're not copying, just symlink and we're done
|
||||||
if !g.Copy {
|
if !g.Copy {
|
||||||
return os.Symlink(u.Path, dst)
|
return os.Symlink(path, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy
|
// Copy
|
||||||
srcF, err := os.Open(u.Path)
|
srcF, err := os.Open(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (g *FileGetter) Get(dst string, u *url.URL) error {
|
func (g *FileGetter) Get(dst string, u *url.URL) error {
|
||||||
|
path := u.Path
|
||||||
|
if u.RawPath != "" {
|
||||||
|
path = u.RawPath
|
||||||
|
}
|
||||||
|
|
||||||
// The source path must exist and be a directory to be usable.
|
// The source path must exist and be a directory to be usable.
|
||||||
if fi, err := os.Stat(u.Path); err != nil {
|
if fi, err := os.Stat(path); err != nil {
|
||||||
return fmt.Errorf("source path error: %s", err)
|
return fmt.Errorf("source path error: %s", err)
|
||||||
} else if !fi.IsDir() {
|
} else if !fi.IsDir() {
|
||||||
return fmt.Errorf("source path must be a directory")
|
return fmt.Errorf("source path must be a directory")
|
||||||
|
@ -43,7 +48,7 @@ func (g *FileGetter) Get(dst string, u *url.URL) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
sourcePath := toBackslash(u.Path)
|
sourcePath := toBackslash(path)
|
||||||
|
|
||||||
// Use mklink to create a junction point
|
// Use mklink to create a junction point
|
||||||
output, err := exec.Command("cmd", "/c", "mklink", "/J", dst, sourcePath).CombinedOutput()
|
output, err := exec.Command("cmd", "/c", "mklink", "/J", dst, sourcePath).CombinedOutput()
|
||||||
|
@ -55,8 +60,13 @@ func (g *FileGetter) Get(dst string, u *url.URL) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *FileGetter) GetFile(dst string, u *url.URL) error {
|
func (g *FileGetter) GetFile(dst string, u *url.URL) error {
|
||||||
|
path := u.Path
|
||||||
|
if u.RawPath != "" {
|
||||||
|
path = u.RawPath
|
||||||
|
}
|
||||||
|
|
||||||
// The source path must exist and be a directory to be usable.
|
// The source path must exist and be a directory to be usable.
|
||||||
if fi, err := os.Stat(u.Path); err != nil {
|
if fi, err := os.Stat(path); err != nil {
|
||||||
return fmt.Errorf("source path error: %s", err)
|
return fmt.Errorf("source path error: %s", err)
|
||||||
} else if fi.IsDir() {
|
} else if fi.IsDir() {
|
||||||
return fmt.Errorf("source path must be a file")
|
return fmt.Errorf("source path must be a file")
|
||||||
|
@ -82,11 +92,11 @@ func (g *FileGetter) GetFile(dst string, u *url.URL) error {
|
||||||
|
|
||||||
// If we're not copying, just symlink and we're done
|
// If we're not copying, just symlink and we're done
|
||||||
if !g.Copy {
|
if !g.Copy {
|
||||||
return os.Symlink(u.Path, dst)
|
return os.Symlink(path, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy
|
// Copy
|
||||||
srcF, err := os.Open(u.Path)
|
srcF, err := os.Open(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,11 +7,11 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
|
"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
"github.com/aws/aws-sdk-go/service/s3"
|
"github.com/aws/aws-sdk-go/service/s3"
|
||||||
)
|
)
|
||||||
|
@ -138,11 +138,21 @@ func (g *S3Getter) getObject(client *s3.S3, dst, bucket, key, version string) er
|
||||||
func (g *S3Getter) getAWSConfig(region string, creds *credentials.Credentials) *aws.Config {
|
func (g *S3Getter) getAWSConfig(region string, creds *credentials.Credentials) *aws.Config {
|
||||||
conf := &aws.Config{}
|
conf := &aws.Config{}
|
||||||
if creds == nil {
|
if creds == nil {
|
||||||
|
// Grab the metadata URL
|
||||||
|
metadataURL := os.Getenv("AWS_METADATA_URL")
|
||||||
|
if metadataURL == "" {
|
||||||
|
metadataURL = "http://169.254.169.254:80/latest"
|
||||||
|
}
|
||||||
|
|
||||||
creds = credentials.NewChainCredentials(
|
creds = credentials.NewChainCredentials(
|
||||||
[]credentials.Provider{
|
[]credentials.Provider{
|
||||||
&credentials.EnvProvider{},
|
&credentials.EnvProvider{},
|
||||||
&credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
|
&credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
|
||||||
&ec2rolecreds.EC2RoleProvider{ExpiryWindow: 5 * time.Minute},
|
&ec2rolecreds.EC2RoleProvider{
|
||||||
|
Client: ec2metadata.New(session.New(&aws.Config{
|
||||||
|
Endpoint: aws.String(metadataURL),
|
||||||
|
})),
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1116,8 +1116,10 @@
|
||||||
"revision": "875fb671b3ddc66f8e2f0acc33829c8cb989a38d"
|
"revision": "875fb671b3ddc66f8e2f0acc33829c8cb989a38d"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"checksumSHA1": "MN8EmPozxjt3pyOCYfsO5Pon8V0=",
|
||||||
"path": "github.com/hashicorp/go-getter",
|
"path": "github.com/hashicorp/go-getter",
|
||||||
"revision": "2822987a64e0df1236ac29dd277ddf79f4871f9a"
|
"revision": "a186869fff81d32bcb4e98c88c7c7d82880271ba",
|
||||||
|
"revisionTime": "2016-08-24T23:43:04Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "github.com/hashicorp/go-getter/helper/url",
|
"path": "github.com/hashicorp/go-getter/helper/url",
|
||||||
|
|
Loading…
Reference in New Issue