Skip to content

Commit

Permalink
Implemented os specific task file support
Browse files Browse the repository at this point in the history
  • Loading branch information
sascha-andres committed Mar 7, 2017
1 parent f686c75 commit 6636cd3
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 19 deletions.
9 changes: 7 additions & 2 deletions errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@ import (
"fmt"
)

// ErrNoTaskFile is returned when the program can not find a proper TaskFile
var ErrNoTaskFile = fmt.Errorf(`task: No task file found (is it named "%s"?)`, TaskFilePath)
type taskFileNotFound struct {
taskFile string
}

func (err taskFileNotFound) Error() string {
return fmt.Sprintf(`task: No task file found (is it named "%s"?)`, err.taskFile)
}

type taskNotFoundError struct {
taskName string
Expand Down
58 changes: 58 additions & 0 deletions read_taskfile.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package task

import (
"encoding/json"
"fmt"
"io/ioutil"
"os"

"runtime"

"github.com/BurntSushi/toml"
"github.com/imdario/mergo"
"gopkg.in/yaml.v2"
)

func readTaskfile() (map[string]*Task, error) {
initialTasks, err := readTaskfileData(TaskFilePath)
if err != nil {
return nil, err
}
mergeTasks, err := readTaskfileData(fmt.Sprintf("%s_%s", TaskFilePath, runtime.GOOS))
if err != nil {
switch err.(type) {
default:
return nil, err
case taskFileNotFound:
return initialTasks, nil
}
}
if err := mergo.MapWithOverwrite(&initialTasks, mergeTasks); err != nil {
return nil, err
}
return initialTasks, nil
}

func readTaskfileData(path string) (tasks map[string]*Task, err error) {
if b, err := ioutil.ReadFile(path + ".yml"); err == nil {
return tasks, yaml.Unmarshal(b, &tasks)
}
if b, err := ioutil.ReadFile(path + ".json"); err == nil {
return tasks, json.Unmarshal(b, &tasks)
}
if b, err := ioutil.ReadFile(path + ".toml"); err == nil {
return tasks, toml.Unmarshal(b, &tasks)
}
return nil, taskFileNotFound{path}
}

func exists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return true, err
}
17 changes: 0 additions & 17 deletions task.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
package task

import (
"encoding/json"
"io/ioutil"
"log"
"os"
"os/exec"
"strings"

"github.com/BurntSushi/toml"
"github.com/spf13/pflag"
"gopkg.in/yaml.v2"
)

var (
Expand Down Expand Up @@ -168,16 +164,3 @@ func (t *Task) runCommand(i int) error {
}
return nil
}

func readTaskfile() (tasks map[string]*Task, err error) {
if b, err := ioutil.ReadFile(TaskFilePath + ".yml"); err == nil {
return tasks, yaml.Unmarshal(b, &tasks)
}
if b, err := ioutil.ReadFile(TaskFilePath + ".json"); err == nil {
return tasks, json.Unmarshal(b, &tasks)
}
if b, err := ioutil.ReadFile(TaskFilePath + ".toml"); err == nil {
return tasks, toml.Unmarshal(b, &tasks)
}
return nil, ErrNoTaskFile
}

0 comments on commit 6636cd3

Please sign in to comment.