github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/all_test.go (about) 1 package main_test 2 3 import ( 4 "io" 5 "os" 6 "os/exec" 7 "strings" 8 ) 9 10 type logcmd struct { 11 f *os.File 12 cmds []string 13 } 14 15 func newlogger(fname string) (*logcmd, error) { 16 f, err := os.Create(fname) 17 if err != nil { 18 return nil, err 19 } 20 return &logcmd{f: f, cmds: nil}, nil 21 } 22 23 func (cmd *logcmd) LastCmd() string { 24 if len(cmd.cmds) <= 0 { 25 return "" 26 } 27 return cmd.cmds[len(cmd.cmds)-1] 28 } 29 func (cmd *logcmd) Run(bin string, args ...string) error { 30 cmd_line := "" 31 { 32 cargs := make([]string, 1, len(args)+1) 33 cargs[0] = bin 34 cargs = append(cargs, args...) 35 cmd_line = strings.Join(cargs, " ") 36 } 37 cmd.cmds = append(cmd.cmds, cmd_line) 38 c := exec.Command(bin, args...) 39 c.Stdout = cmd.f 40 c.Stderr = cmd.f 41 42 _, err := cmd.f.WriteString("\n" + strings.Repeat("#", 80) + "\n") 43 if err != nil { 44 return err 45 } 46 47 _, err = cmd.f.WriteString("## " + cmd_line + "\n") 48 if err != nil { 49 return err 50 } 51 52 return c.Run() 53 } 54 55 func (cmd *logcmd) Close() error { 56 return cmd.f.Close() 57 } 58 59 func (cmd *logcmd) Display() { 60 cmd.f.Seek(0, 0) 61 io.Copy(os.Stderr, cmd.f) 62 } 63 64 // EOF