1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-06-23 00:39:13 +02:00

run subprocess cleanly

This commit is contained in:
Jesse Duffield
2018-08-07 18:05:43 +10:00
parent 9067c3be3e
commit f6a9c727fa
3 changed files with 33 additions and 20 deletions

View File

@ -349,15 +349,14 @@ func getOpenCommand() (string, string) {
} }
func runSubProcess(g *gocui.Gui, cmdName string, commandArgs ...string) { func runSubProcess(g *gocui.Gui, cmdName string, commandArgs ...string) {
// TODO: find a way to wait for the subprocess without having to subprocess = exec.Command(cmdName, commandArgs...)
// close and reinitialize the gui subprocess.Stdin = os.Stdin
// g.Close() // TODO: find a way to make close properly after uncommenting subprocess.Stdout = os.Stdout
cmd := exec.Command(cmdName, commandArgs...) subprocess.Stderr = os.Stderr
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout g.Update(func(g *gocui.Gui) error {
cmd.Stderr = os.Stderr return ErrSubprocess
cmd.Run() })
run() // start another Gui
} }
func getBranchDiff(branch string, baseBranch string) (string, error) { func getBranchDiff(branch string, baseBranch string) (string, error) {

14
gui.go
View File

@ -5,7 +5,6 @@ import (
// "io" // "io"
// "io/ioutil" // "io/ioutil"
"log"
"strings" "strings"
"time" "time"
@ -321,10 +320,10 @@ func updateLoader(g *gocui.Gui) {
} }
} }
func run() { func run() (err error) {
g, err := gocui.NewGui(gocui.OutputNormal, OverlappingEdges) g, err := gocui.NewGui(gocui.OutputNormal, OverlappingEdges)
if err != nil { if err != nil {
log.Panicln(err) return
} }
defer g.Close() defer g.Close()
@ -343,13 +342,12 @@ func run() {
g.SetManagerFunc(layout) g.SetManagerFunc(layout)
if err := keybindings(g); err != nil { if err = keybindings(g); err != nil {
log.Panicln(err) return
} }
if err := g.MainLoop(); err != nil && err != gocui.ErrQuit { err = g.MainLoop()
log.Panicln(err) return
}
} }
func quit(g *gocui.Gui, v *gocui.View) error { func quit(g *gocui.Gui, v *gocui.View) error {

18
main.go
View File

@ -1,19 +1,25 @@
package main package main
import ( import (
"errors"
"flag" "flag"
"fmt" "fmt"
"log" "log"
"os" "os"
"os/exec"
"os/user" "os/user"
"time" "time"
"github.com/fatih/color" "github.com/fatih/color"
"github.com/jesseduffield/gocui"
) )
// ErrSubProcess is raised when we are running a subprocess
var ( var (
startTime time.Time startTime time.Time
debugging bool debugging bool
ErrSubprocess = errors.New("running subprocess")
subprocess *exec.Cmd
) )
func homeDirectory() string { func homeDirectory() string {
@ -65,5 +71,15 @@ func main() {
startTime = time.Now() startTime = time.Now()
verifyInGitRepo() verifyInGitRepo()
navigateToRepoRootDirectory() navigateToRepoRootDirectory()
run() for {
if err := run(); err != nil {
if err == gocui.ErrQuit {
break
} else if err == ErrSubprocess {
subprocess.Run()
} else {
log.Panicln(err)
}
}
}
} }