This commit is contained in:
Alex Yatskov 2015-10-31 13:08:10 +09:00
parent 5bd898f11f
commit 769b3073af
4 changed files with 47 additions and 35 deletions

View File

@ -24,11 +24,10 @@ package main
import (
"github.com/FooSoft/goldsmith"
_ "github.com/FooSoft/goldsmith-plugins/markdown"
"github.com/FooSoft/goldsmith-plugins/markdown"
)
func main() {
gs := goldsmith.NewGoldsmith("/home/alex/projects/website/content/src")
// gs.Apply(markdown.NewMarkdown()).Complete("/home/alex/projects/test")
gs.Complete("/home/alex/projects/test")
gs.Apply(markdown.NewMarkdown()).Complete("/home/alex/projects/test")
}

40
file.go
View File

@ -28,18 +28,18 @@ import (
)
type file struct {
path string
meta map[string]interface{}
buff *bytes.Buffer
err error
relPath, srcPath string
meta map[string]interface{}
buff *bytes.Buffer
err error
}
func (f *file) Path() string {
return f.path
return f.relPath
}
func (f *file) SetPath(path string) {
f.path = path
f.relPath = path
}
func (f *file) Property(key, def string) interface{} {
@ -63,24 +63,26 @@ func (f *file) SetError(err error) {
f.err = err
}
func (f *file) Data() (*bytes.Buffer, error) {
func (f *file) Data() *bytes.Buffer {
if f.buff != nil {
return f.buff, nil
return f.buff
}
file, err := os.Open(f.path)
if err != nil {
f.SetError(err)
return nil, err
}
defer file.Close()
var buff bytes.Buffer
if _, err := buff.ReadFrom(file); err != nil {
f.SetError(err)
return nil, err
if len(f.srcPath) > 0 {
file, err := os.Open(f.srcPath)
if err != nil {
f.SetError(err)
return nil
}
defer file.Close()
if _, err := buff.ReadFrom(file); err != nil {
f.SetError(err)
return nil
}
}
f.buff = &buff
return f.buff, nil
return f.buff
}

View File

@ -24,6 +24,9 @@ package goldsmith
import (
"io/ioutil"
"log"
"os"
"path"
"path/filepath"
"github.com/bmatcuk/doublestar"
@ -38,14 +41,14 @@ type goldsmith struct {
files chan File
}
func NewGoldsmith(path string) Goldsmith {
func NewGoldsmith(src string) Goldsmith {
gs := new(goldsmith)
gs.scan(path)
gs.scan(src)
return gs
}
func (gs *goldsmith) scan(path string) error {
matches, err := doublestar.Glob(filepath.Join(path, "**"))
func (gs *goldsmith) scan(srcDir string) error {
matches, err := doublestar.Glob(filepath.Join(srcDir, "**"))
if err != nil {
return err
}
@ -56,14 +59,15 @@ func (gs *goldsmith) scan(path string) error {
}
for _, match := range matches {
path, err := filepath.Rel(path, match)
relPath, err := filepath.Rel(srcDir, match)
if err != nil {
return err
}
s.output <- gs.NewFile(path)
s.output <- &file{relPath: relPath, srcPath: match}
}
close(s.output)
gs.stages = append(gs.stages, s)
return nil
}
@ -78,8 +82,8 @@ func (gs *goldsmith) stage() stage {
return s
}
func (gs *goldsmith) NewFile(path string) File {
return &file{path: path}
func (gs *goldsmith) NewFile(relPath string) File {
return &file{relPath: relPath}
}
func (gs *goldsmith) Apply(p Processor) Goldsmith {
@ -88,18 +92,25 @@ func (gs *goldsmith) Apply(p Processor) Goldsmith {
return gs
}
func (gs *goldsmith) Complete(path string) []File {
func (gs *goldsmith) Complete(dstDir string) []File {
s := gs.stages[len(gs.stages)-1]
var files []File
for file := range s.output {
data, err := file.Data()
if err != nil {
log.Print(file)
data := file.Data()
if data == nil {
continue
}
absPath := filepath.Join(dstDir, file.Path())
if err := os.MkdirAll(path.Dir(absPath), 0755); err != nil {
file.SetError(err)
continue
}
absPath := filepath.Join(path, file.Path())
if err := ioutil.WriteFile(absPath, data.Bytes(), 0644); err != nil {
file.SetError(err)
continue

View File

@ -38,7 +38,7 @@ type File interface {
Error() error
SetError(err error)
Data() (*bytes.Buffer, error)
Data() *bytes.Buffer
}
type Processor interface {