mirror of
https://github.com/go-task/task.git
synced 2025-01-12 04:34:11 +02:00
6ed30f1add
This shouldn't have any behavior changes for now. This is a code refactor that should allow us to do further improvements on how variables are handled, specially regarding respecting the declaration order in Taskfiles, which should make it easier for the users. Initial work on #218
87 lines
1.8 KiB
Go
87 lines
1.8 KiB
Go
package taskfile
|
|
|
|
import (
|
|
"errors"
|
|
)
|
|
|
|
// Tasks represents a group of tasks
|
|
type Tasks map[string]*Task
|
|
|
|
// Task represents a task
|
|
type Task struct {
|
|
Task string
|
|
Cmds []*Cmd
|
|
Deps []*Dep
|
|
Desc string
|
|
Summary string
|
|
Sources []string
|
|
Generates []string
|
|
Status []string
|
|
Preconditions []*Precondition
|
|
Dir string
|
|
Vars *Vars
|
|
Env *Vars
|
|
Silent bool
|
|
Method string
|
|
Prefix string
|
|
IgnoreError bool
|
|
}
|
|
|
|
var (
|
|
// ErrCantUnmarshalTask is returned for invalid task YAML
|
|
ErrCantUnmarshalTask = errors.New("task: can't unmarshal task value")
|
|
)
|
|
|
|
func (t *Task) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|
var cmd Cmd
|
|
if err := unmarshal(&cmd); err == nil && cmd.Cmd != "" {
|
|
t.Cmds = append(t.Cmds, &cmd)
|
|
return nil
|
|
}
|
|
|
|
var cmds []*Cmd
|
|
if err := unmarshal(&cmds); err == nil && len(cmds) > 0 {
|
|
t.Cmds = cmds
|
|
return nil
|
|
}
|
|
|
|
var task struct {
|
|
Cmds []*Cmd
|
|
Deps []*Dep
|
|
Desc string
|
|
Summary string
|
|
Sources []string
|
|
Generates []string
|
|
Status []string
|
|
Preconditions []*Precondition
|
|
Dir string
|
|
Vars *Vars
|
|
Env *Vars
|
|
Silent bool
|
|
Method string
|
|
Prefix string
|
|
IgnoreError bool `yaml:"ignore_error"`
|
|
}
|
|
if err := unmarshal(&task); err == nil {
|
|
t.Cmds = task.Cmds
|
|
t.Deps = task.Deps
|
|
t.Desc = task.Desc
|
|
t.Summary = task.Summary
|
|
t.Sources = task.Sources
|
|
t.Generates = task.Generates
|
|
t.Status = task.Status
|
|
t.Preconditions = task.Preconditions
|
|
t.Dir = task.Dir
|
|
t.Vars = task.Vars
|
|
t.Env = task.Env
|
|
t.Silent = task.Silent
|
|
t.Method = task.Method
|
|
t.Prefix = task.Prefix
|
|
t.IgnoreError = task.IgnoreError
|
|
|
|
return nil
|
|
}
|
|
|
|
return ErrCantUnmarshalTask
|
|
}
|