1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-03-23 21:51:07 +02:00

Merge branch 'master' into smaller-ui

This commit is contained in:
Mark Kopenga 2019-05-06 15:24:36 +02:00 committed by GitHub
commit 61890cb9de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 78 additions and 9 deletions

View File

@ -27,8 +27,11 @@ func navigateToRepoRootDirectory(stat func(string) (os.FileInfo, error), chdir f
for { for {
f, err := stat(".git") f, err := stat(".git")
if err == nil && f.IsDir() { if err == nil {
return nil if f.IsDir() {
return nil
}
return errors.New("expected .git to be a directory")
} }
if !os.IsNotExist(err) { if !os.IsNotExist(err) {
@ -274,8 +277,8 @@ func (c *GitCommand) Fetch(unamePassQuestion func(string) string, canAskForCrede
} }
// ResetToCommit reset to commit // ResetToCommit reset to commit
func (c *GitCommand) ResetToCommit(sha string) error { func (c *GitCommand) ResetToCommit(sha string, strength string) error {
return c.OSCommand.RunCommand(fmt.Sprintf("git reset %s", sha)) return c.OSCommand.RunCommand(fmt.Sprintf("git reset --%s %s", strength, sha))
} }
// NewBranch create new branch // NewBranch create new branch

View File

@ -616,12 +616,12 @@ func TestGitCommandResetToCommit(t *testing.T) {
gitCmd := NewDummyGitCommand() gitCmd := NewDummyGitCommand()
gitCmd.OSCommand.command = func(cmd string, args ...string) *exec.Cmd { gitCmd.OSCommand.command = func(cmd string, args ...string) *exec.Cmd {
assert.EqualValues(t, "git", cmd) assert.EqualValues(t, "git", cmd)
assert.EqualValues(t, []string{"reset", "78976bc"}, args) assert.EqualValues(t, []string{"reset", "--hard", "78976bc"}, args)
return exec.Command("echo") return exec.Command("echo")
} }
assert.NoError(t, gitCmd.ResetToCommit("78976bc")) assert.NoError(t, gitCmd.ResetToCommit("78976bc", "hard"))
} }
// TestGitCommandNewBranch is a function. // TestGitCommandNewBranch is a function.

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"strconv" "strconv"
"github.com/fatih/color"
"github.com/go-errors/errors" "github.com/go-errors/errors"
"github.com/jesseduffield/gocui" "github.com/jesseduffield/gocui"
@ -124,7 +125,8 @@ func (gui *Gui) handleResetToCommit(g *gocui.Gui, commitView *gocui.View) error
if commit == nil { if commit == nil {
panic(errors.New(gui.Tr.SLocalize("NoCommitsThisBranch"))) panic(errors.New(gui.Tr.SLocalize("NoCommitsThisBranch")))
} }
if err := gui.GitCommand.ResetToCommit(commit.Sha); err != nil {
if err := gui.GitCommand.ResetToCommit(commit.Sha, "mixed"); err != nil {
return gui.createErrorPanel(g, err.Error()) return gui.createErrorPanel(g, err.Error())
} }
if err := gui.refreshCommits(g); err != nil { if err := gui.refreshCommits(g); err != nil {
@ -554,3 +556,50 @@ func (gui *Gui) handleSquashAllAboveFixupCommits(g *gocui.Gui, v *gocui.View) er
}) })
}, nil) }, nil)
} }
type resetOption struct {
description string
command string
}
// GetDisplayStrings is a function.
func (r *resetOption) GetDisplayStrings(isFocused bool) []string {
return []string{r.description, color.New(color.FgRed).Sprint(r.command)}
}
func (gui *Gui) handleCreateCommitResetMenu(g *gocui.Gui, v *gocui.View) error {
commit := gui.getSelectedCommit(g)
if commit == nil {
return gui.createErrorPanel(gui.g, gui.Tr.SLocalize("NoCommitsThisBranch"))
}
strengths := []string{"soft", "mixed", "hard"}
options := make([]*resetOption, len(strengths))
for i, strength := range strengths {
options[i] = &resetOption{
description: fmt.Sprintf("%s reset", strength),
command: fmt.Sprintf("reset --%s %s", strength, commit.Sha),
}
}
handleMenuPress := func(index int) error {
if err := gui.GitCommand.ResetToCommit(commit.Sha, strengths[index]); err != nil {
return err
}
if err := gui.refreshCommits(g); err != nil {
return err
}
if err := gui.refreshFiles(); err != nil {
return err
}
if err := gui.resetOrigin(gui.getCommitsView()); err != nil {
return err
}
gui.State.Panels.Commits.SelectedLine = 0
return gui.handleCommitSelect(g, gui.getCommitsView())
}
return gui.createMenu(fmt.Sprintf("%s %s", gui.Tr.SLocalize("resetTo"), commit.Sha), options, len(options), handleMenuPress)
}

View File

@ -21,7 +21,11 @@ func (gui *Gui) contextTitleMap() map[string]map[string]string {
} }
func (gui *Gui) setMainTitle() error { func (gui *Gui) setMainTitle() error {
currentViewName := gui.g.CurrentView().Name() currentView := gui.g.CurrentView()
if currentView == nil {
return nil
}
currentViewName := currentView.Name()
var newTitle string var newTitle string
if context, ok := gui.State.Contexts[currentViewName]; ok { if context, ok := gui.State.Contexts[currentViewName]; ok {
newTitle = gui.contextTitleMap()[currentViewName][context] newTitle = gui.contextTitleMap()[currentViewName][context]

View File

@ -86,6 +86,10 @@ func (gui *Gui) refreshFiles() error {
selectedFile, _ := gui.getSelectedFile(gui.g) selectedFile, _ := gui.getSelectedFile(gui.g)
filesView := gui.getFilesView() filesView := gui.getFilesView()
if filesView == nil {
// if the filesView hasn't been instantiated yet we just return
return nil
}
if err := gui.refreshStateFiles(); err != nil { if err := gui.refreshStateFiles(); err != nil {
return err return err
} }

View File

@ -327,7 +327,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
ViewName: "commits", ViewName: "commits",
Key: 'g', Key: 'g',
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleResetToCommit, Handler: gui.handleCreateCommitResetMenu,
Description: gui.Tr.SLocalize("resetToThisCommit"), Description: gui.Tr.SLocalize("resetToThisCommit"),
}, { }, {
ViewName: "commits", ViewName: "commits",

View File

@ -733,6 +733,9 @@ func addDutch(i18nObject *i18n.Bundle) error {
}, &i18n.Message{ }, &i18n.Message{
ID: "SkipHookPrefixNotConfigured", ID: "SkipHookPrefixNotConfigured",
Other: "Je hebt nog niet een commit bericht voorvoegsel ingesteld voor het overslaan van hooks. Set `git.skipHookPrefix = 'WIP'` in je config", Other: "Je hebt nog niet een commit bericht voorvoegsel ingesteld voor het overslaan van hooks. Set `git.skipHookPrefix = 'WIP'` in je config",
}, &i18n.Message{
ID: "resetTo",
Other: `reset to`,
}, },
) )
} }

View File

@ -756,6 +756,9 @@ func addEnglish(i18nObject *i18n.Bundle) error {
}, &i18n.Message{ }, &i18n.Message{
ID: "SkipHookPrefixNotConfigured", ID: "SkipHookPrefixNotConfigured",
Other: "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config", Other: "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config",
}, &i18n.Message{
ID: "resetTo",
Other: `reset to`,
}, },
) )
} }

View File

@ -716,6 +716,9 @@ func addPolish(i18nObject *i18n.Bundle) error {
}, &i18n.Message{ }, &i18n.Message{
ID: "SkipHookPrefixNotConfigured", ID: "SkipHookPrefixNotConfigured",
Other: "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config", Other: "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config",
}, &i18n.Message{
ID: "resetTo",
Other: `reset to`,
}, },
) )
} }