/
cmd_activator.go
54 lines (47 loc) · 1.09 KB
/
cmd_activator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package item
import (
"fmt"
"github.com/julienmoumne/hotshell/cmd/hs/formatter"
"io"
"os"
"os/exec"
"path"
)
type CmdActivator struct {
Out io.Writer
cmd *exec.Cmd
osCwd string
item *Item
}
func (c *CmdActivator) Activate(item *Item) {
c.item = item
c.cmd = exec.Command("bash", "-c", item.Cmd)
c.print(formatter.ExecutedCmdFmt(" %s\n\n", formatter.FormatCommand(c.cmd)))
var err error
c.osCwd, err = os.Getwd()
if !c.displayErrIfNotNil(err) {
c.runCmd()
}
c.print("\n")
}
func (c *CmdActivator) runCmd() {
c.cmd.Stdin = os.Stdin
c.cmd.Stdout = c.Out
c.cmd.Stderr = os.Stderr
c.cmd.Dir = path.Clean(fmt.Sprintf("%s/%s", c.osCwd, c.item.Wd))
c.displayErrIfNotNil(c.cmd.Start())
c.displayErrIfNotNil(c.cmd.Wait())
}
func (c *CmdActivator) displayErrIfNotNil(err error) bool {
if err == nil {
return false
}
c.printf("\n%s\n", err)
return true
}
func (c *CmdActivator) printf(format string, a ...interface{}) (n int, err error) {
return fmt.Fprintf(c.Out, format, a...)
}
func (c *CmdActivator) print(a ...interface{}) (n int, err error) {
return fmt.Fprint(c.Out, a...)
}