commit a552991c53ca03347904d63925e2e334f1c7550b
parent b6aaa0eef43e00498993e11470bc20edfa526d11
Author: gearsix <gearsix@tuta.io>
Date: Tue, 17 Aug 2021 13:38:45 +0100
added Config.Assets;all Config.Assets files are copied on build
Diffstat:
3 files changed, 45 insertions(+), 23 deletions(-)
diff --git a/config.go b/config.go
@@ -9,14 +9,16 @@ import (
// Config is the data structure containing all key/values to be loaded
// in pagr configuration files
type Config struct {
- Pages string
+ Pages string
Templates string
+ Assets []string
Output string
}
// relPaths sets all filepath values in `cfg` relative to `dir`
func (cfg *Config) relPaths(dir string) {
var paths = []string{cfg.Pages, cfg.Templates, cfg.Output}
+ paths = append(paths, cfg.Assets...)
for i, path := range paths {
if !filepath.IsAbs(path) {
paths[i] = filepath.Join(dir, path)
@@ -25,14 +27,16 @@ func (cfg *Config) relPaths(dir string) {
cfg.Pages = paths[0]
cfg.Templates = paths[1]
cfg.Output = paths[2]
+ cfg.Assets = paths[3:]
return
}
// NewConfig returns a Config with default values
func NewConfig() Config {
return Config{
- Pages: "./content",
+ Pages: "./content",
Templates: "./templates",
+ Assets: []string{"./assets"},
Output: "./out",
}
}
diff --git a/page.go b/page.go
@@ -325,28 +325,31 @@ func (page *Page) applyDefaults(defaultMetas map[string]Meta) {
func (p *Page) CopyAssets(srcDir, outDir string) (err error) {
for _, a := range p.Assets {
- var srcf *os.File
- src := filepath.Join(srcDir, a)
- if srcf, err = os.Open(src); err != nil {
- return err
- }
- defer srcf.Close()
+ CopyFile(filepath.Join(srcDir, a), filepath.Join(outDir, a))
+ }
+ return
+}
- var dstf *os.File
- dst := filepath.Join(outDir, a)
- if err = os.MkdirAll(filepath.Dir(dst), 0777); err != nil {
- return err
- }
- if dstf, err = os.OpenFile(dst, os.O_RDWR|os.O_CREATE, 0644); err != nil {
- return err
- }
- defer dstf.Close()
+func CopyFile(src, dst string) (err error) {
+ if err = os.MkdirAll(filepath.Dir(dst), 0777); err != nil {
+ return err
+ }
- if _, err = io.Copy(dstf, srcf); err != nil {
- return err
- }
- dstf.Sync()
+ var srcf, dstf *os.File
+ if srcf, err = os.Open(src); err != nil {
+ return err
+ }
+ defer srcf.Close()
+ if dstf, err = os.OpenFile(dst, os.O_RDWR|os.O_CREATE, 0644); err != nil {
+ return err
}
+ defer dstf.Close()
+
+ if _, err = io.Copy(dstf, srcf); err != nil {
+ return err
+ }
+ dstf.Sync()
+
return
}
diff --git a/pagr.go b/pagr.go
@@ -2,6 +2,7 @@ package main
import (
"flag"
+ "io/fs"
"os"
"strings"
"sync"
@@ -64,13 +65,14 @@ func main() {
log.Printf("loaded %d template files", len(t))
htmlc := 0
- assetc := 0
+ assetc := copyAssets(wg, config)
var wg sync.WaitGroup
for _, pg := range p {
var tmpl suti.Template
tmpl, err = findTemplate(pg, t)
if os.IsNotExist(err) {
- log.Printf("warning: skipping '%s', failed to find template '%s'\n", pg.Path, pg.GetTemplate())
+ log.Printf("warning: skipping '%s', failed to find template '%s'\n",
+ pg.Path, pg.GetTemplate())
continue
} else {
check(err)
@@ -105,3 +107,16 @@ func findTemplate(pg Page, templates []suti.Template) (suti.Template, error) {
return t, err
}
+func copyAssets(wg sync.WaitGroup, cfg Config) (n int) {
+ for _, a := range cfg.Assets {
+ filepath.Walk(a, func(path string, info fs.FileInfo, err error) error {
+ if !info.IsDir() {
+ n++
+ wg.Add(1)
+ go CopyFile(path, filepath.Join(cfg.Output, strings.TrimPrefix(path, filepath.Clean(a))))
+ }
+ return err
+ })
+ }
+ return n
+}