factor out platform specific logic into a struct on state

This commit is contained in:
Jesse Duffield 2018-08-09 13:14:24 +10:00
parent ce8884f509
commit 5cc34e7801
2 changed files with 30 additions and 10 deletions

View file

@ -8,7 +8,6 @@ import (
"os"
"os/exec"
"regexp"
"runtime"
"strings"
"time"
@ -118,20 +117,12 @@ func mergeGitStatusFiles(oldGitFiles, newGitFiles []GitFile) []GitFile {
return result
}
func platformShell() (string, string) {
if runtime.GOOS == "windows" {
return "cmd", "/c"
}
return "bash", "-c"
}
func runDirectCommand(command string) (string, error) {
timeStart := time.Now()
commandLog(command)
shell, shellArg := platformShell()
cmdOut, err := exec.
Command(shell, shellArg, command).
Command(state.Platform.shell, state.Platform.shellArg, command).
CombinedOutput()
devLog("run direct command time for command: ", command, time.Now().Sub(timeStart))
return sanitisedCommandOutput(cmdOut, err)

29
gui.go
View file

@ -5,6 +5,7 @@ import (
// "io"
// "io/ioutil"
"runtime"
"strings"
"time"
@ -28,6 +29,7 @@ type stateType struct {
ConflictTop bool
Conflicts []conflict
EditHistory *stack.Stack
Platform platform
}
type conflict struct {
@ -45,6 +47,33 @@ var state = stateType{
ConflictTop: true,
Conflicts: make([]conflict, 0),
EditHistory: stack.New(),
Platform: getPlatform(),
}
type platform struct {
os string
shell string
shellArg string
escapedQuote string
}
func getPlatform() platform {
switch runtime.GOOS {
case "windows":
return platform{
os: "windows",
shell: "cmd",
shellArg: "/c",
escapedQuote: "\\\"",
}
default:
return platform{
os: runtime.GOOS,
shell: "bash",
shellArg: "-c",
escapedQuote: "\"",
}
}
}
func scrollUpMain(g *gocui.Gui, v *gocui.View) error {