diff options
author | mjarkk <mkopenga@gmail.com> | 2018-12-12 22:10:33 +0100 |
---|---|---|
committer | mjarkk <mkopenga@gmail.com> | 2018-12-12 22:11:31 +0100 |
commit | 5d038dfd334d4bdd767ac4db504a21160a013f79 (patch) | |
tree | e27a87e61cd385a0e2be18b2c69cfd65088eceac /pkg/commands | |
parent | 0577d3b97fcedaf02b5aaa19ac29bdd082599209 (diff) |
Removed the wired error handling
Diffstat (limited to 'pkg/commands')
-rw-r--r-- | pkg/commands/exec_live_default.go | 19 | ||||
-rw-r--r-- | pkg/commands/exec_live_win.go | 5 | ||||
-rw-r--r-- | pkg/commands/os.go | 12 |
3 files changed, 16 insertions, 20 deletions
diff --git a/pkg/commands/exec_live_default.go b/pkg/commands/exec_live_default.go index 9f08b014b..acc0bcf18 100644 --- a/pkg/commands/exec_live_default.go +++ b/pkg/commands/exec_live_default.go @@ -4,6 +4,7 @@ package commands import ( "bufio" + "errors" "os" "os/exec" "strings" @@ -19,8 +20,9 @@ import ( // As return of output you need to give a string that will be written to stdin // NOTE: If the return data is empty it won't written anything to stdin // NOTE: You don't have to include a enter in the return data this function will do that for you -func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(string) string) (errorMessage string, codeError error) { +func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(string) string) error { cmdOutput := []string{} + cmdOutputOffset := 0 splitCmd := str.ToArgv(command) cmd := exec.Command(splitCmd[0], splitCmd[1:]...) @@ -30,12 +32,8 @@ func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(s tty, err := pty.Start(cmd) - // go func() { - // _ = tty.Close() - // }() - if err != nil { - return "", err + return err } var waitForBufio sync.WaitGroup @@ -49,6 +47,8 @@ func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(s cmdOutput = append(cmdOutput, toOutput) toWrite := output(toOutput) if len(toWrite) > 0 { + // don't do -1 because the next value is the username / password + cmdOutputOffset = len(cmdOutput) _, _ = tty.Write([]byte(toWrite + "\n")) } } @@ -59,10 +59,13 @@ func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(s tty.Close() if err != nil { waitForBufio.Wait() - return strings.Join(cmdOutput, " "), err + if len(cmdOutput) == cmdOutputOffset { + cmdOutputOffset-- + } + return errors.New(err.Error() + ", " + strings.Join(cmdOutput[cmdOutputOffset:], " ")) } - return errorMessage, nil + return nil } // scanWordsWithNewLines is a copy of bufio.ScanWords but this also captures new lines diff --git a/pkg/commands/exec_live_win.go b/pkg/commands/exec_live_win.go index d97274279..343e0dd9f 100644 --- a/pkg/commands/exec_live_win.go +++ b/pkg/commands/exec_live_win.go @@ -4,7 +4,6 @@ package commands // RunCommandWithOutputLiveWrapper runs a command live but because of windows compatibility this command can't be ran there // TODO: Remove this hack and replace it with a propper way to run commands live on windows -func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(string) string) (errorMessage string, codeError error) { - cmdOputput := c.RunCommand(command) - return cmdOputput.Error(), cmdOputput +func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(string) string) error { + return c.RunCommand(command) } diff --git a/pkg/commands/os.go b/pkg/commands/os.go index d40a60e46..827e6c420 100644 --- a/pkg/commands/os.go +++ b/pkg/commands/os.go @@ -59,7 +59,7 @@ func (c *OSCommand) RunCommandWithOutput(command string) (string, error) { } // RunCommandWithOutputLive runs RunCommandWithOutputLiveWrapper -func (c *OSCommand) RunCommandWithOutputLive(command string, output func(string) string) (errorMessage string, err error) { +func (c *OSCommand) RunCommandWithOutputLive(command string, output func(string) string) error { return RunCommandWithOutputLiveWrapper(c, command, output) } @@ -68,7 +68,7 @@ func (c *OSCommand) RunCommandWithOutputLive(command string, output func(string) // The ask argument will be "username" or "password" and expects the user's password or username back func (c *OSCommand) DetectUnamePass(command string, ask func(string) string) error { ttyText := "" - errMessage, err := c.RunCommandWithOutputLive(command, func(word string) string { + errMessage := c.RunCommandWithOutputLive(command, func(word string) string { ttyText = ttyText + " " + word prompts := map[string]string{ @@ -85,13 +85,7 @@ func (c *OSCommand) DetectUnamePass(command string, ask func(string) string) err return "" }) - if err != nil { - if strings.Contains("exit status 128", err.Error()) { - errMessage = "exit status 128" - } - return errors.New(errMessage) - } - return nil + return errMessage } // RunCommand runs a command and just returns the error |