shithub: hugo

Download patch

ref: b0f536fb276f63df0b0b8d92aeda80affb4b6a34
parent: 1384d77a04d7027d719993c6f54f892b5e7974db
author: Robert van Gent <[email protected]>
date: Fri May 31 05:55:48 EDT 2019

Drop dashes in http header matcher attributes; other changes from code review

--- a/commands/deploy.go
+++ b/commands/deploy.go
@@ -68,7 +68,7 @@
 	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
--- a/deploy/deployConfig.go
+++ b/deploy/deployConfig.go
@@ -48,15 +48,15 @@
 
 	// 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".
--- 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 @@
 
 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 @@
 	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)
+	// 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)
+	}
 
-	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)
+	// 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) {
--- a/docs/content/en/hosting-and-deployment/hugo-deploy.md
+++ b/docs/content/en/hosting-and-deployment/hugo-deploy.md
@@ -58,12 +58,12 @@
 # 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 @@
 # 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 @@
 
 [[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 @@
 
 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.