~foosoft/goldsmith

5327d67eaebd2e82e2cae4d137786a0a60ae3b37 — Alex Yatskov 9 years ago 512dfcb
Cleanup
2 files changed, 21 insertions(+), 30 deletions(-)

M goldsmith.go
M types.go
M goldsmith.go => goldsmith.go +20 -26
@@ 35,61 35,54 @@ type stage struct {
}

type goldsmith struct {
	srcPath, dstPath string
	stages           []stage
	files            chan File
	wg               sync.WaitGroup
	stages []stage
	files  chan File
	wg     sync.WaitGroup
}

func NewGoldsmith(srcPath, dstPath string) (Goldsmith, error) {
	gs := &goldsmith{srcPath: srcPath, dstPath: dstPath}
	if err := gs.scan(); err != nil {
func NewGoldsmith(path string) (Goldsmith, error) {
	gs := new(goldsmith)
	if err := gs.scan(path); err != nil {
		return nil, err
	}

	return gs, nil
}

func (gs *goldsmith) scan() error {
	matches, err := doublestar.Glob(filepath.Join(gs.srcPath, "**"))
func (gs *goldsmith) scan(path string) error {
	matches, err := doublestar.Glob(filepath.Join(path, "**"))
	if err != nil {
		return err
	}

	gs.files = make(chan File, len(matches))
	s := stage{
		input:  nil,
		output: make(chan File, len(matches)),
	}

	for _, match := range matches {
		path, err := filepath.Rel(gs.srcPath, match)
		path, err := filepath.Rel(path, match)
		if err != nil {
			return err
		}

		gs.files <- gs.NewFile(path)
		s.output <- gs.NewFile(path)
	}

	gs.stages = append(gs.stages, s)
	return nil
}

func (gs *goldsmith) stage() stage {
	s := stage{output: make(chan File)}
	if len(gs.stages) == 0 {
		s.input = gs.files
	} else {
		s.input = gs.stages[len(gs.stages)-1].output
	s := stage{
		input:  gs.stages[len(gs.stages)-1].output,
		output: make(chan File),
	}

	gs.stages = append(gs.stages, s)
	return s
}

func (gs *goldsmith) SrcPath(path string) string {
	return gs.srcPath
}

func (gs *goldsmith) DstPath(path string) string {
	return gs.dstPath
}

func (gs *goldsmith) NewFile(path string) File {
	return &file{path, make(map[string]interface{}), nil}
}


@@ 106,6 99,7 @@ func (gs *goldsmith) Apply(p Processor) Goldsmith {
	return gs
}

func (gs *goldsmith) Complete() {
func (gs *goldsmith) Complete(path string) error {
	gs.wg.Wait()
	return nil
}

M types.go => types.go +1 -4
@@ 25,9 25,6 @@ package goldsmith
import "bytes"

type Context interface {
	SrcPath(path string) string
	DstPath(path string) string

	NewFile(path string) File
}



@@ 47,5 44,5 @@ type Processor interface {

type Goldsmith interface {
	Apply(p Processor) Goldsmith
	Complete()
	Complete(path string) error
}

Do not follow this link