From 997f2b332bed0ca80bb6d3550be09afd52f2ebab Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 24 Aug 2016 16:48:59 -0700 Subject: [PATCH] vendor: update go-getter --- .../hashicorp/go-getter/.travis.yml | 10 --- .../github.com/hashicorp/go-getter/README.md | 82 +++++++++++++++++++ .../hashicorp/go-getter/decompress_testing.go | 10 ++- .../hashicorp/go-getter/decompress_zip.go | 11 ++- .../hashicorp/go-getter/get_file_unix.go | 20 +++-- .../hashicorp/go-getter/get_file_windows.go | 20 +++-- .../github.com/hashicorp/go-getter/get_s3.go | 14 +++- vendor/vendor.json | 4 +- 8 files changed, 146 insertions(+), 25 deletions(-) delete mode 100644 vendor/github.com/hashicorp/go-getter/.travis.yml diff --git a/vendor/github.com/hashicorp/go-getter/.travis.yml b/vendor/github.com/hashicorp/go-getter/.travis.yml deleted file mode 100644 index 59bf16855..000000000 --- a/vendor/github.com/hashicorp/go-getter/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -sudo: false - -language: go - -go: - - 1.5 - -branches: - only: - - master diff --git a/vendor/github.com/hashicorp/go-getter/README.md b/vendor/github.com/hashicorp/go-getter/README.md index d7f5cc3f7..30aed323f 100644 --- a/vendor/github.com/hashicorp/go-getter/README.md +++ b/vendor/github.com/hashicorp/go-getter/README.md @@ -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 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 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 as checksumming. The special `archive` query parameter will be removed 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 + diff --git a/vendor/github.com/hashicorp/go-getter/decompress_testing.go b/vendor/github.com/hashicorp/go-getter/decompress_testing.go index 2834e399d..686d6c2b6 100644 --- a/vendor/github.com/hashicorp/go-getter/decompress_testing.go +++ b/vendor/github.com/hashicorp/go-getter/decompress_testing.go @@ -8,6 +8,7 @@ import ( "os" "path/filepath" "reflect" + "runtime" "sort" "strings" "testing" @@ -69,9 +70,16 @@ func TestDecompressor(t *testing.T, d Decompressor, cases []TestDecompressCase) 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 actual := testListDir(t, dst) - expected := tc.DirList if !reflect.DeepEqual(actual, expected) { t.Fatalf("bad %s\n\n%#v\n\n%#v", tc.Input, actual, expected) } diff --git a/vendor/github.com/hashicorp/go-getter/decompress_zip.go b/vendor/github.com/hashicorp/go-getter/decompress_zip.go index 0e4f6d739..a065c076f 100644 --- a/vendor/github.com/hashicorp/go-getter/decompress_zip.go +++ b/vendor/github.com/hashicorp/go-getter/decompress_zip.go @@ -46,7 +46,7 @@ func (d *ZipDecompressor) Decompress(dst, src string, dir bool) error { } if f.FileInfo().IsDir() { - if dir { + if !dir { return fmt.Errorf("expected a single file: %s", src) } @@ -58,6 +58,15 @@ func (d *ZipDecompressor) Decompress(dst, src string, dir bool) error { 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 srcF, err := f.Open() if err != nil { diff --git a/vendor/github.com/hashicorp/go-getter/get_file_unix.go b/vendor/github.com/hashicorp/go-getter/get_file_unix.go index c69d34ad3..693680ac2 100644 --- a/vendor/github.com/hashicorp/go-getter/get_file_unix.go +++ b/vendor/github.com/hashicorp/go-getter/get_file_unix.go @@ -11,8 +11,13 @@ import ( ) 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. - 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) } else if !fi.IsDir() { 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 os.Symlink(u.Path, dst) + return os.Symlink(path, dst) } 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. - 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) } else if fi.IsDir() { 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 !g.Copy { - return os.Symlink(u.Path, dst) + return os.Symlink(path, dst) } // Copy - srcF, err := os.Open(u.Path) + srcF, err := os.Open(path) if err != nil { return err } diff --git a/vendor/github.com/hashicorp/go-getter/get_file_windows.go b/vendor/github.com/hashicorp/go-getter/get_file_windows.go index cc50ae7e1..f87ed0a0b 100644 --- a/vendor/github.com/hashicorp/go-getter/get_file_windows.go +++ b/vendor/github.com/hashicorp/go-getter/get_file_windows.go @@ -13,8 +13,13 @@ import ( ) 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. - 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) } else if !fi.IsDir() { 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 } - sourcePath := toBackslash(u.Path) + sourcePath := toBackslash(path) // Use mklink to create a junction point 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 { + path := u.Path + if u.RawPath != "" { + path = u.RawPath + } + // 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) } else if fi.IsDir() { 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 !g.Copy { - return os.Symlink(u.Path, dst) + return os.Symlink(path, dst) } // Copy - srcF, err := os.Open(u.Path) + srcF, err := os.Open(path) if err != nil { return err } diff --git a/vendor/github.com/hashicorp/go-getter/get_s3.go b/vendor/github.com/hashicorp/go-getter/get_s3.go index 6014fc797..bcfcbfc90 100644 --- a/vendor/github.com/hashicorp/go-getter/get_s3.go +++ b/vendor/github.com/hashicorp/go-getter/get_s3.go @@ -7,11 +7,11 @@ import ( "os" "path/filepath" "strings" - "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" "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/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 { conf := &aws.Config{} 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( []credentials.Provider{ &credentials.EnvProvider{}, &credentials.SharedCredentialsProvider{Filename: "", Profile: ""}, - &ec2rolecreds.EC2RoleProvider{ExpiryWindow: 5 * time.Minute}, + &ec2rolecreds.EC2RoleProvider{ + Client: ec2metadata.New(session.New(&aws.Config{ + Endpoint: aws.String(metadataURL), + })), + }, }) } diff --git a/vendor/vendor.json b/vendor/vendor.json index 78227755a..492df3541 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1116,8 +1116,10 @@ "revision": "875fb671b3ddc66f8e2f0acc33829c8cb989a38d" }, { + "checksumSHA1": "MN8EmPozxjt3pyOCYfsO5Pon8V0=", "path": "github.com/hashicorp/go-getter", - "revision": "2822987a64e0df1236ac29dd277ddf79f4871f9a" + "revision": "a186869fff81d32bcb4e98c88c7c7d82880271ba", + "revisionTime": "2016-08-24T23:43:04Z" }, { "path": "github.com/hashicorp/go-getter/helper/url",