basic file pipeline

This commit is contained in:
dre 2021-07-10 22:44:25 +08:00
parent 970dca3f58
commit 3744aea0be

142
main.go
View file

@ -7,6 +7,7 @@ import (
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
"strings"
"time" "time"
"github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/config"
@ -43,32 +44,34 @@ func main() {
} }
permalinks := cfg.GetStringMapString("permalinks") permalinks := cfg.GetStringMapString("permalinks")
fmt.Println("permalinks", permalinks) //fmt.Println("permalinks", permalinks)
fpath := "content/posts/first-post.md" /*
file, err := os.Open(fpath) fpath := "content/posts/first-post.md"
if err != nil { file, err := os.Open(fpath)
log.Fatal("open", err) if err != nil {
} log.Fatal("open", err)
}
page, err := ReadFrom(file) page, err := ReadFrom(file)
if err != nil { if err != nil {
log.Fatal("read page", err) log.Fatal("read page", err)
} }
fmt.Println(string(page.FrontMatter())) fmt.Println(string(page.FrontMatter()))
fmt.Println(string(page.Content())) fmt.Println(string(page.Content()))
meta, err := page.Metadata() meta, err := page.Metadata()
if err != nil { if err != nil {
log.Fatal("read meta", err) log.Fatal("read meta", err)
} }
c := NewContentFromMeta(meta) c := NewContentFromMeta(meta)
fmt.Println(c) fmt.Println(c)
link, err := pathPattern(permalinks["posts"]).Expand(c) link, err := pathPattern(permalinks["posts"]).Expand(c)
if err != nil { if err != nil {
log.Fatal("permalink expand", err) log.Fatal("permalink expand", err)
} }
fmt.Println(link) fmt.Println(link)
*/
// test // test
linkcfg := func(subdir string) string { linkcfg := func(subdir string) string {
@ -78,29 +81,82 @@ func main() {
} }
return defaultPermalinkFormat return defaultPermalinkFormat
} }
listDirectory(source, linkcfg)
files := make(chan File)
go collectFiles(source, files)
for file := range files {
pattern := linkcfg(file.Parent)
err := destinationPath(&file, pattern)
if err != nil {
fmt.Println(err, file)
continue
}
fmt.Printf("%s -> %s (%d)\n", file.Source, file.Destination, len(file.Body))
}
// iterate through file tree source
// for each file, get destination path, switch file extension, remove underscore for index
// call proc and pipe content through it, catch output of proc and write to destination
// replace links?
// write rss?
// write listings from template?
} }
func parse(fullpath string) (*Content, error) { type FileTree struct {
Files map[string]*File
}
type File struct {
Root string
Source string
Destination string
Parent string
Name string
Extension string
Body []byte
}
func parse(fullpath string) ([]byte, *Content, error) {
file, err := os.Open(fullpath) file, err := os.Open(fullpath)
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
page, err := ReadFrom(file) page, err := ReadFrom(file)
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
meta, err := page.Metadata() meta, err := page.Metadata()
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
c := NewContentFromMeta(meta) c := NewContentFromMeta(meta)
fmt.Println(c) return append(page.FrontMatter(), page.Content()...), c, nil
return c, nil
} }
func listDirectory(fullpath string, linkcfg func(string) string) error { func destinationPath(file *File, pattern string) error {
body, c, err := parse(file.Source)
if err != nil {
return err
}
c.Filepath = file.Name
file.Body = body
if file.Parent != "." {
link, err := pathPattern(pattern).Expand(c)
if err != nil {
return err
}
file.Destination = link
} else {
file.Destination = strings.TrimLeft(file.Name, "_")
}
return nil
}
func collectFiles(fullpath string, filechan chan File) error {
defer close(filechan)
return filepath.Walk(fullpath, return filepath.Walk(fullpath,
func(p string, info os.FileInfo, err error) error { func(p string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
@ -119,24 +175,14 @@ func listDirectory(fullpath string, linkcfg func(string) string) error {
ext := path.Ext(filename) ext := path.Ext(filename)
name := filename[0 : len(filename)-len(ext)] name := filename[0 : len(filename)-len(ext)]
parent := filepath.Dir(rel) parent := filepath.Dir(rel)
fmt.Println(p, info.Name(), parent, rel, ext)
c, err := parse(p)
if err != nil {
return err
}
c.Filepath = name
if parent != "." { filechan <- File{
pattern := linkcfg(parent) Root: fullpath,
link, err := pathPattern(pattern).Expand(c) Source: p,
if err != nil { Name: name,
return err Extension: ext,
} Parent: parent,
c.Permalink = link
} else {
c.Permalink = filename
} }
fmt.Println(c)
return nil return nil
}) })