(cmdName string, args []string, stdin io.Reader)
| 159 | } |
| 160 | |
| 161 | func (c *Check) run(cmdName string, args []string, stdin io.Reader) (string, []string, error) { |
| 162 | c.log.Debugln("running", cmdName, args) |
| 163 | |
| 164 | cmd := exec.Command(cmdName, args...) |
| 165 | cmd.Stdin = stdin |
| 166 | stdout, err := cmd.StdoutPipe() |
| 167 | if err != nil { |
| 168 | return "", nil, err |
| 169 | } |
| 170 | |
| 171 | if err := cmd.Start(); err != nil { |
| 172 | return "", nil, err |
| 173 | } |
| 174 | |
| 175 | scnr := bufio.NewScanner(stdout) |
| 176 | var ( |
| 177 | folder string |
| 178 | flags []string |
| 179 | ) |
| 180 | if scnr.Scan() { |
| 181 | folder = scnr.Text() |
| 182 | } |
| 183 | for scnr.Scan() { |
| 184 | flags = append(flags, scnr.Text()) |
| 185 | } |
| 186 | if err := scnr.Err(); err != nil { |
| 187 | return "", nil, err |
| 188 | } |
| 189 | |
| 190 | err = cmd.Wait() |
| 191 | if err != nil { |
| 192 | if _, ok := err.(*exec.ExitError); !ok { |
| 193 | // If that's not ExitError, the process may still be running. We do |
| 194 | // not want this. |
| 195 | if err := cmd.Process.Signal(os.Interrupt); err != nil { |
| 196 | c.log.Error("failed to kill process", err) |
| 197 | } |
| 198 | } |
| 199 | return "", nil, err |
| 200 | } |
| 201 | |
| 202 | c.log.Debugf("folder: %s, extra flags: %v", folder, flags) |
| 203 | |
| 204 | return folder, flags, nil |
| 205 | } |
| 206 | |
| 207 | func init() { |
| 208 | modules.Register(modName, New) |
no test coverage detected