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