~foosoft/goldsmith

1ebb78f5500137b6437a00f1a7ac8bdaa452121b — Alex Yatskov 9 years ago 954d451
Improved error handling
2 files changed, 23 insertions(+), 22 deletions(-)

M goldsmith.go
M types.go
M goldsmith.go => goldsmith.go +21 -21
@@ 38,6 38,7 @@ type stage struct {
type goldsmith struct {
	stages []stage
	files  chan File
	err    error
}

func New(src string) Goldsmith {


@@ 46,21 47,19 @@ func New(src string) Goldsmith {
	return gs
}

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

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

	s := stage{nil, make(chan File, len(matches))}
	for _, match := range matches {
		relPath, err := filepath.Rel(srcDir, match)
		if err != nil {
			return err
			gs.err = err
			return
		}

		s.output <- &file{relPath: relPath, srcPath: match}


@@ 68,15 67,10 @@ func (gs *goldsmith) scan(srcDir string) error {

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

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

	s := stage{gs.stages[len(gs.stages)-1].output, make(chan File)}
	gs.stages = append(gs.stages, s)
	return s
}


@@ 85,6 79,10 @@ func (gs *goldsmith) NewFile(relPath string) File {
	return &file{relPath: relPath}
}

func (gs *goldsmith) SetError(err error) {
	gs.err = err
}

func (gs *goldsmith) taskSingle(ts TaskerSingle) {
	s := gs.makeStage()



@@ 109,17 107,19 @@ func (gs *goldsmith) taskMultiple(tm TaskerMultiple) {
}

func (gs *goldsmith) Task(task interface{}) Goldsmith {
	switch t := task.(type) {
	case TaskerSingle:
		gs.taskSingle(t)
	case TaskerMultiple:
		gs.taskMultiple(t)
	if gs.err == nil {
		switch t := task.(type) {
		case TaskerSingle:
			gs.taskSingle(t)
		case TaskerMultiple:
			gs.taskMultiple(t)
		}
	}

	return gs
}

func (gs *goldsmith) Complete(dstDir string) []File {
func (gs *goldsmith) Complete(dstDir string) ([]File, error) {
	s := gs.stages[len(gs.stages)-1]

	var files []File


@@ 151,5 151,5 @@ func (gs *goldsmith) Complete(dstDir string) []File {
		files = append(files, file)
	}

	return files
	return files, gs.err
}

M types.go => types.go +2 -1
@@ 24,7 24,7 @@ package goldsmith

type Goldsmith interface {
	Task(task interface{}) Goldsmith
	Complete(dstDir string) []File
	Complete(dstDir string) ([]File, error)
}

type TaskerSingle interface {


@@ 37,6 37,7 @@ type TaskerMultiple interface {

type Context interface {
	NewFile(srcDir string) File
	SetError(err error)
}

type File interface {

Do not follow this link