1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-11-27 22:38:09 +02:00

add support for merging

This commit is contained in:
Jesse Duffield
2018-06-09 19:06:33 +10:00
parent 4f6ae62e79
commit 7653ff9a24
10 changed files with 540 additions and 131 deletions

View File

@@ -2,16 +2,15 @@ package main
import (
"fmt"
"sort"
"strings"
"time"
"github.com/fatih/color"
"github.com/jesseduffield/gocui"
)
var cyclableViews = []string{"files", "branches", "commits", "stash"}
func refreshSidePanels(g *gocui.Gui, v *gocui.View) error {
func refreshSidePanels(g *gocui.Gui) error {
refreshBranches(g)
refreshFiles(g)
refreshCommits(g)
@@ -54,6 +53,9 @@ func newLineFocused(g *gocui.Gui, v *gocui.View) error {
case "confirmation":
return nil
case "main":
// TODO: pull this out into a 'view focused' function
refreshMergePanel(g)
v.Highlight = false
return nil
case "commits":
return handleCommitSelect(g, v)
@@ -72,6 +74,7 @@ func returnFocus(g *gocui.Gui, v *gocui.View) error {
return switchFocus(g, v, previousView)
}
// pass in oldView = nil if you don't want to be able to return to your old view
func switchFocus(g *gocui.Gui, oldView, newView *gocui.View) error {
// we assume we'll never want to return focus to a confirmation panel i.e.
// we should never stack confirmation panels
@@ -100,7 +103,9 @@ func trimmedContent(v *gocui.View) string {
}
func cursorUp(g *gocui.Gui, v *gocui.View) error {
if v == nil {
// swallowing cursor movements in main
// TODO: pull this out
if v == nil || v.Name() == "main" {
return nil
}
@@ -116,24 +121,20 @@ func cursorUp(g *gocui.Gui, v *gocui.View) error {
return nil
}
func resetOrigin(v *gocui.View) error {
if err := v.SetCursor(0, 0); err != nil {
return err
}
return v.SetOrigin(0, 0)
}
func cursorDown(g *gocui.Gui, v *gocui.View) error {
if v != nil {
cx, cy := v.Cursor()
ox, oy := v.Origin()
if cy+oy >= len(v.BufferLines())-2 {
return nil
}
if err := v.SetCursor(cx, cy+1); err != nil {
if err := v.SetOrigin(ox, oy+1); err != nil {
return err
}
// swallowing cursor movements in main
// TODO: pull this out
if v == nil || v.Name() == "main" {
return nil
}
cx, cy := v.Cursor()
ox, oy := v.Origin()
if cy+oy >= len(v.BufferLines())-2 {
return nil
}
if err := v.SetCursor(cx, cy+1); err != nil {
if err := v.SetOrigin(ox, oy+1); err != nil {
return err
}
}
@@ -141,6 +142,13 @@ func cursorDown(g *gocui.Gui, v *gocui.View) error {
return nil
}
func resetOrigin(v *gocui.View) error {
if err := v.SetCursor(0, 0); err != nil {
return err
}
return v.SetOrigin(0, 0)
}
// if the cursor down past the last item, move it up one
func correctCursor(v *gocui.View) error {
cx, cy := v.Cursor()
@@ -154,8 +162,6 @@ func correctCursor(v *gocui.View) error {
func renderString(g *gocui.Gui, viewName, s string) error {
g.Update(func(*gocui.Gui) error {
timeStart := time.Now()
colorLog(color.FgRed, viewName)
v, err := g.View(viewName)
if err != nil {
panic(err)
@@ -163,7 +169,6 @@ func renderString(g *gocui.Gui, viewName, s string) error {
v.Clear()
fmt.Fprint(v, s)
v.Wrap = true
devLog("render time: ", time.Now().Sub(timeStart))
return nil
})
return nil
@@ -179,3 +184,16 @@ func splitLines(multilineString string) []string {
}
return lines
}
func optionsMapToString(optionsMap map[string]string) string {
optionsArray := make([]string, 0)
for key, description := range optionsMap {
optionsArray = append(optionsArray, key+": "+description)
}
sort.Strings(optionsArray)
return strings.Join(optionsArray, ", ")
}
func renderOptionsMap(g *gocui.Gui, optionsMap map[string]string) error {
return renderString(g, "options", optionsMapToString(optionsMap))
}