aboutsummaryrefslogtreecommitdiffhomepage
path: root/deploy/deploy.go
diff options
context:
space:
mode:
Diffstat (limited to 'deploy/deploy.go')
-rw-r--r--deploy/deploy.go22
1 files changed, 20 insertions, 2 deletions
diff --git a/deploy/deploy.go b/deploy/deploy.go
index b2a8a8813..a69e974b7 100644
--- a/deploy/deploy.go
+++ b/deploy/deploy.go
@@ -133,10 +133,14 @@ func (d *Deployer) Deploy(ctx context.Context) error {
// Load local files from the source directory.
var include, exclude glob.Glob
+ var mappath func(string) string
if d.target != nil {
include, exclude = d.target.IncludeGlob, d.target.ExcludeGlob
+ if d.target.StripIndexHTML {
+ mappath = stripIndexHTML
+ }
}
- local, err := d.walkLocal(d.localFs, d.cfg.Matchers, include, exclude, d.mediaTypes)
+ local, err := d.walkLocal(d.localFs, d.cfg.Matchers, include, exclude, d.mediaTypes, mappath)
if err != nil {
return err
}
@@ -483,7 +487,7 @@ func knownHiddenDirectory(name string) bool {
// walkLocal walks the source directory and returns a flat list of files,
// using localFile.SlashPath as the map keys.
-func (d *Deployer) walkLocal(fs afero.Fs, matchers []*deployconfig.Matcher, include, exclude glob.Glob, mediaTypes media.Types) (map[string]*localFile, error) {
+func (d *Deployer) walkLocal(fs afero.Fs, matchers []*deployconfig.Matcher, include, exclude glob.Glob, mediaTypes media.Types, mappath func(string) string) (map[string]*localFile, error) {
retval := map[string]*localFile{}
err := afero.Walk(fs, "", func(path string, info os.FileInfo, err error) error {
if err != nil {
@@ -529,6 +533,11 @@ func (d *Deployer) walkLocal(fs afero.Fs, matchers []*deployconfig.Matcher, incl
break
}
}
+ // Apply any additional modifications to the local path, to map it to
+ // the remote path.
+ if mappath != nil {
+ slashpath = mappath(slashpath)
+ }
lf, err := newLocalFile(fs, path, slashpath, m, mediaTypes)
if err != nil {
return err
@@ -542,6 +551,15 @@ func (d *Deployer) walkLocal(fs afero.Fs, matchers []*deployconfig.Matcher, incl
return retval, nil
}
+// stripIndexHTML remaps keys matching "<dir>/index.html" to "<dir>/".
+func stripIndexHTML(slashpath string) string {
+ const suffix = "/index.html"
+ if strings.HasSuffix(slashpath, suffix) {
+ return slashpath[:len(slashpath)-len(suffix)+1]
+ }
+ return slashpath
+}
+
// walkRemote walks the target bucket and returns a flat list.
func (d *Deployer) walkRemote(ctx context.Context, bucket *blob.Bucket, include, exclude glob.Glob) (map[string]*blob.ListObject, error) {
retval := map[string]*blob.ListObject{}