Initial pass for true and false conditionals for tasks
This commit is contained in:
parent
4bda542bd5
commit
29f25892d8
23
command.go
23
command.go
@ -61,7 +61,7 @@ func findCmdDeps(params []string, conf *config) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func processCmdMacro(macroName string, args []string, conf *config) error {
|
||||
func processCmdMacro(macroName string, args []string, interact bool, conf *config) error {
|
||||
m, mn := findCmdMacro(macroName, conf)
|
||||
if m == nil {
|
||||
return fmt.Errorf("macro or variant not found: %s", macroName)
|
||||
@ -75,10 +75,10 @@ func processCmdMacro(macroName string, args []string, conf *config) error {
|
||||
log.Printf("expanding macro: %s", mn)
|
||||
}
|
||||
|
||||
return processCmd(margs, conf)
|
||||
return processCmd(margs, interact, conf)
|
||||
}
|
||||
|
||||
func processCmd(params []string, conf *config) error {
|
||||
func processCmd(params []string, interact bool, conf *config) error {
|
||||
args := appendExpEnv(nil, params)
|
||||
if len(args) == 0 {
|
||||
return fmt.Errorf("invalid command statement")
|
||||
@ -91,19 +91,28 @@ func processCmd(params []string, conf *config) error {
|
||||
}
|
||||
|
||||
if strings.HasPrefix(cmdName, "@") {
|
||||
return processCmdMacro(cmdName, cmdArgs, conf)
|
||||
return processCmdMacro(cmdName, cmdArgs, interact, conf)
|
||||
}
|
||||
|
||||
if conf.flags&flagVerbose != 0 {
|
||||
log.Printf("executing command: %s %s", cmdName, strings.Join(cmdArgs, " "))
|
||||
}
|
||||
|
||||
return try(func() error {
|
||||
exec := func() error {
|
||||
cmd := exec.Command(cmdName, cmdArgs...)
|
||||
cmd.Dir = conf.dstDir
|
||||
if interact {
|
||||
cmd.Stderr = os.Stderr
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stdin = os.Stdin
|
||||
return cmd.Run()
|
||||
})
|
||||
}
|
||||
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
if interact {
|
||||
return try(exec)
|
||||
}
|
||||
|
||||
return exec()
|
||||
}
|
||||
|
21
task.go
21
task.go
@ -32,6 +32,8 @@ type task struct {
|
||||
Links [][]string
|
||||
Cmds [][]string
|
||||
Envs [][]string
|
||||
IfTrue [][]string
|
||||
IfFalse [][]string
|
||||
}
|
||||
|
||||
func (t *task) deps(conf *config) []string {
|
||||
@ -60,11 +62,28 @@ func (t *task) process(conf *config) error {
|
||||
}
|
||||
|
||||
if conf.flags&flagNoCmds == 0 {
|
||||
CmdLoop:
|
||||
for {
|
||||
for _, currCnd := range t.IfTrue {
|
||||
if err := processCmd(currCnd, false, conf); err != nil {
|
||||
break CmdLoop
|
||||
}
|
||||
}
|
||||
|
||||
for _, currCnd := range t.IfFalse {
|
||||
if err := processCmd(currCnd, false, conf); err == nil {
|
||||
break CmdLoop
|
||||
}
|
||||
}
|
||||
|
||||
for _, currCmd := range t.Cmds {
|
||||
if err := processCmd(currCmd, conf); err != nil {
|
||||
if err := processCmd(currCmd, true, conf); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if conf.flags&flagNoLinks == 0 {
|
||||
|
Loading…
Reference in New Issue
Block a user