1
0
mirror of https://github.com/go-task/task.git synced 2024-12-12 10:45:49 +02:00
task/taskfile/precondition.go

60 lines
1.1 KiB
Go
Raw Normal View History

2019-05-17 22:13:47 +02:00
package taskfile
import (
"errors"
"fmt"
"gopkg.in/yaml.v3"
2019-05-17 22:13:47 +02:00
)
2023-03-31 21:13:29 +02:00
// ErrCantUnmarshalPrecondition is returned for invalid precond YAML.
var ErrCantUnmarshalPrecondition = errors.New("task: Can't unmarshal precondition value")
2019-05-17 22:13:47 +02:00
// Precondition represents a precondition necessary for a task to run
type Precondition struct {
2019-05-28 22:02:59 +02:00
Sh string
Msg string
2019-05-17 22:13:47 +02:00
}
func (p *Precondition) DeepCopy() *Precondition {
if p == nil {
return nil
}
return &Precondition{
Sh: p.Sh,
Msg: p.Msg,
}
}
2019-05-17 22:13:47 +02:00
// UnmarshalYAML implements yaml.Unmarshaler interface.
func (p *Precondition) UnmarshalYAML(node *yaml.Node) error {
switch node.Kind {
case yaml.ScalarNode:
var cmd string
if err := node.Decode(&cmd); err != nil {
return err
}
2019-05-17 22:13:47 +02:00
p.Sh = cmd
p.Msg = fmt.Sprintf("`%s` failed", cmd)
return nil
case yaml.MappingNode:
var sh struct {
Sh string
Msg string
}
if err := node.Decode(&sh); err != nil {
return err
}
p.Sh = sh.Sh
p.Msg = sh.Msg
if p.Msg == "" {
p.Msg = fmt.Sprintf("%s failed", sh.Sh)
}
return nil
2019-05-17 22:13:47 +02:00
}
return fmt.Errorf("yaml: line %d: cannot unmarshal %s into precondition", node.Line, node.ShortTag())
2019-05-17 22:13:47 +02:00
}