Defer running cygpath

pull/3746/head
Junegunn Choi 4 weeks ago
parent 0ed4493856
commit cd7a0425ab
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627

@ -7,12 +7,14 @@ import (
"os/exec"
"regexp"
"strings"
"sync/atomic"
"syscall"
)
type Executor struct {
shell string
args []string
shell string
args []string
shellPath atomic.Value
}
func NewExecutor(withShell string) *Executor {
@ -23,12 +25,6 @@ func NewExecutor(withShell string) *Executor {
} else if len(shell) == 0 {
shell = "cmd"
}
if strings.Contains(shell, "/") {
out, err := exec.Command("cygpath", "-w", shell).Output()
if err == nil {
shell = strings.Trim(string(out), "\n")
}
}
if len(args) > 0 {
args = args[1:]
@ -39,7 +35,7 @@ func NewExecutor(withShell string) *Executor {
} else {
args = []string{"-c"}
}
return &Executor{shell, args}
return &Executor{shell: shell, args: args}
}
// ExecCommand executes the given command with $SHELL
@ -48,7 +44,19 @@ func NewExecutor(withShell string) *Executor {
// NOTE: For "powershell", we should ideally set output encoding to UTF8,
// but it is left as is now because no adverse effect has been observed.
func (x *Executor) ExecCommand(command string, setpgid bool) *exec.Cmd {
cmd := exec.Command(x.shell, append(x.args, command)...)
shell := x.shell
if cached := x.shellPath.Load(); cached != nil {
shell = cached.(string)
} else {
if strings.Contains(shell, "/") {
out, err := exec.Command("cygpath", "-w", shell).Output()
if err == nil {
shell = strings.Trim(string(out), "\n")
}
}
x.shellPath.Store(shell)
}
cmd := exec.Command(shell, append(x.args, command)...)
cmd.SysProcAttr = &syscall.SysProcAttr{
HideWindow: false,
CreationFlags: 0,

Loading…
Cancel
Save