Drop dashes in http header matcher attributes; other changes from code review - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b0f536fb276f63df0b0b8d92aeda80affb4b6a34
 (DIR) parent 1384d77a04d7027d719993c6f54f892b5e7974db
 (HTM) Author: Robert van Gent <rvangent@google.com>
       Date:   Fri, 31 May 2019 09:55:48 -0700
       
       Drop dashes in http header matcher attributes; other changes from code review
       
       Diffstat:
         M commands/deploy.go                  |       2 +-
         M deploy/deployConfig.go              |       6 +++---
         M deploy/deployConfig_test.go         |      89 +++++++++++++++++++------------
         M docs/content/en/hosting-and-deploy… |      23 ++++++++++++-----------
       
       4 files changed, 70 insertions(+), 50 deletions(-)
       ---
 (DIR) diff --git a/commands/deploy.go b/commands/deploy.go
       @@ -68,7 +68,7 @@ func newDeployCmd() *deployCmd {
                cc.cmd.Flags().Bool("confirm", false, "ask for confirmation before making changes to the target")
                cc.cmd.Flags().Bool("dryRun", false, "dry run")
                cc.cmd.Flags().Bool("force", false, "force upload of all files")
       -        cc.cmd.Flags().Bool("invalidateCDN", true, "invalidate the CDN cache via the CloudFrontDistributionID listed in the deployment target")
       +        cc.cmd.Flags().Bool("invalidateCDN", true, "invalidate the CDN cache via the cloudFrontDistributionID listed in the deployment target")
                cc.cmd.Flags().Int("maxDeletes", 256, "maximum # of files to delete, or -1 to disable")
        
                return cc
 (DIR) diff --git a/deploy/deployConfig.go b/deploy/deployConfig.go
       @@ -48,15 +48,15 @@ type matcher struct {
        
                // CacheControl specifies caching attributes to use when serving the blob.
                // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
       -        CacheControl string `mapstructure:"Cache-Control"`
       +        CacheControl string
        
                // ContentEncoding specifies the encoding used for the blob's content, if any.
                // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding
       -        ContentEncoding string `mapstructure:"Content-Encoding"`
       +        ContentEncoding string
        
                // ContentType specifies the MIME type of the blob being written.
                // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type
       -        ContentType string `mapstructure:"Content-Type"`
       +        ContentType string
        
                // Gzip determines whether the file should be gzipped before upload.
                // If so, the ContentEncoding field will automatically be set to "gzip".
 (DIR) diff --git a/deploy/deployConfig_test.go b/deploy/deployConfig_test.go
       @@ -14,6 +14,7 @@
        package deploy
        
        import (
       +        "fmt"
                "testing"
        
                "github.com/gohugoio/hugo/config"
       @@ -32,29 +33,48 @@ someOtherValue = "foo"
        
        order = ["o1", "o2"]
        
       +# All lowercase.
        [[deployment.targets]]
       -Name = "name1"
       +name = "name0"
       +url = "url0"
       +cloudfrontdistributionid = "cdn0"
       +
       +# All uppercase.
       +[[deployment.targets]]
       +NAME = "name1"
        URL = "url1"
       -CloudFrontDistributionID = "cdn1"
       +CLOUDFRONTDISTRIBUTIONID = "cdn1"
        
       +# Camelcase.
        [[deployment.targets]]
        name = "name2"
        url = "url2"
       -cloudfrontdistributionid = "cdn2"
       +cloudFrontDistributionID = "cdn2"
        
       +# All lowercase.
        [[deployment.matchers]]
       -Pattern = "^pattern1$"
       -Cache-Control = "cachecontrol1"
       -Content-Encoding = "contentencoding1"
       -Content-Type = "contenttype1"
       -Gzip = true
       -Force = true
       +pattern = "^pattern0$"
       +cachecontrol = "cachecontrol0"
       +contentencoding = "contentencoding0"
       +contenttype = "contenttype0"
        
       +# All uppercase.
       +[[deployment.matchers]]
       +PATTERN = "^pattern1$"
       +CACHECONTROL = "cachecontrol1"
       +CONTENTENCODING = "contentencoding1"
       +CONTENTTYPE = "contenttype1"
       +GZIP = true
       +FORCE = true
       +
       +# Camelcase.
        [[deployment.matchers]]
        pattern = "^pattern2$"
       -cache-control = "cachecontrol2"
       -content-encoding = "contentencoding2"
       -content-type = "contenttype2"
       +cacheControl = "cachecontrol2"
       +contentEncoding = "contentencoding2"
       +contentType = "contenttype2"
       +gzip = true
       +force = true
        `
                cfg, err := config.FromConfigString(tomlConfig, "toml")
                assert.NoError(err)
       @@ -62,34 +82,33 @@ content-type = "contenttype2"
                dcfg, err := decodeConfig(cfg)
                assert.NoError(err)
        
       +        // Order.
                assert.Equal(2, len(dcfg.Order))
                assert.Equal("o1", dcfg.Order[0])
                assert.Equal("o2", dcfg.Order[1])
                assert.Equal(2, len(dcfg.ordering))
        
       -        assert.Equal(2, len(dcfg.Targets))
       -        assert.Equal("name1", dcfg.Targets[0].Name)
       -        assert.Equal("url1", dcfg.Targets[0].URL)
       -        assert.Equal("cdn1", dcfg.Targets[0].CloudFrontDistributionID)
       -        assert.Equal("name2", dcfg.Targets[1].Name)
       -        assert.Equal("url2", dcfg.Targets[1].URL)
       -        assert.Equal("cdn2", dcfg.Targets[1].CloudFrontDistributionID)
       -
       -        assert.Equal(2, len(dcfg.Matchers))
       -        assert.Equal("^pattern1$", dcfg.Matchers[0].Pattern)
       -        assert.NotNil(dcfg.Matchers[0].re)
       -        assert.Equal("cachecontrol1", dcfg.Matchers[0].CacheControl)
       -        assert.Equal("contentencoding1", dcfg.Matchers[0].ContentEncoding)
       -        assert.Equal("contenttype1", dcfg.Matchers[0].ContentType)
       -        assert.True(dcfg.Matchers[0].Gzip)
       -        assert.True(dcfg.Matchers[0].Force)
       -        assert.Equal("^pattern2$", dcfg.Matchers[1].Pattern)
       -        assert.NotNil(dcfg.Matchers[1].re)
       -        assert.Equal("cachecontrol2", dcfg.Matchers[1].CacheControl)
       -        assert.Equal("contentencoding2", dcfg.Matchers[1].ContentEncoding)
       -        assert.Equal("contenttype2", dcfg.Matchers[1].ContentType)
       -        assert.False(dcfg.Matchers[1].Gzip)
       -        assert.False(dcfg.Matchers[1].Force)
       +        // Targets.
       +        assert.Equal(3, len(dcfg.Targets))
       +        for i := 0; i < 3; i++ {
       +                tgt := dcfg.Targets[i]
       +                assert.Equal(fmt.Sprintf("name%d", i), tgt.Name)
       +                assert.Equal(fmt.Sprintf("url%d", i), tgt.URL)
       +                assert.Equal(fmt.Sprintf("cdn%d", i), tgt.CloudFrontDistributionID)
       +        }
       +
       +        // Matchers.
       +        assert.Equal(3, len(dcfg.Matchers))
       +        for i := 0; i < 3; i++ {
       +                m := dcfg.Matchers[i]
       +                assert.Equal(fmt.Sprintf("^pattern%d$", i), m.Pattern)
       +                assert.NotNil(m.re)
       +                assert.Equal(fmt.Sprintf("cachecontrol%d", i), m.CacheControl)
       +                assert.Equal(fmt.Sprintf("contentencoding%d", i), m.ContentEncoding)
       +                assert.Equal(fmt.Sprintf("contenttype%d", i), m.ContentType)
       +                assert.Equal(i != 0, m.Gzip)
       +                assert.Equal(i != 0, m.Force)
       +        }
        }
        
        func TestInvalidOrderingPattern(t *testing.T) {
 (DIR) diff --git a/docs/content/en/hosting-and-deployment/hugo-deploy.md b/docs/content/en/hosting-and-deployment/hugo-deploy.md
       @@ -58,12 +58,12 @@ a detailed example:
        # By default, files are uploaded in an arbitrary order.
        # Files that match the regular expressions in the "Order" list
        # will be uploaded first, in the listed order.
       -Order = [".jpg$", ".gif$"]
       +order = [".jpg$", ".gif$"]
        
        
        [[deployment.targets]]
        # An arbitrary name for this target.
       -Name = "mydeployment"
       +name = "mydeployment"
        # The Go Cloud Development Kit URL to deploy to. Examples:
          # URL = "gs://<Bucket Name>"  # For GCS; see https://gocloud.dev/howto/blob/open-bucket/#gcs.
          # URL = "s3://<Bucket Name>?region=<AWS region>"  # For S3; see https://gocloud.dev/howto/blob/open-bucket/#s3.
       @@ -71,7 +71,7 @@ Name = "mydeployment"
        # You can use a "prefix=" query parameter to target a subfolder of the bucket:
          # URL = "gs://<Bucket Name>?prefix=a/subfolder/"
        # If you are using a CloudFront CDN, deploy will invalidate the cache as needed.
       -CloudFrontDistributionID = <ID>
       +cloudFrontDistributionID = <ID>
        
        
        # ... add more [[deployment.targets]] sections ...
       @@ -82,17 +82,17 @@ CloudFrontDistributionID = <ID>
        
        [[deployment.matchers]]
        #  Cache static assets for 20 years.
       -Pattern = "^.+\\.(js|css|svg|ttf)$"
       -Cache-Control = "max-age=630720000, no-transform, public"
       +pattern = "^.+\\.(js|css|svg|ttf)$"
       +cacheControl = "max-age=630720000, no-transform, public"
        gzip = true
        
        [[deployment.matchers]]
       -Pattern = "^.+\\.(png|jpg)$"
       -Cache-Control = "max-age=630720000, no-transform, public"
       +pattern = "^.+\\.(png|jpg)$"
       +cacheControl = "max-age=630720000, no-transform, public"
        gzip = false
        
        [[deployment.matchers]]
       -Pattern = "^.+\\.(html|xml|json)$"
       +pattern = "^.+\\.(html|xml|json)$"
        gzip = true
        ```
        
       @@ -100,11 +100,12 @@ gzip = true
        
        To deploy to a target:
        ```
       -hugo deploy --target=<target>
       +hugo deploy --target=<target name>
        ```
        
       -Hugo will identify any local changes that need to be uploaded, and ask for
       -confirmation before doing anything.
       +Hugo will identify and apply any local changes that need to be reflected to the
       +remote target. You can use `--dryRun` to see the changes without applying them,
       +or `--confirm` to be prompted before making changes.
        
        See `hugo help deploy` for more command-line options.