mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-01-24 05:36:19 +02:00
autostash changes when hard resetting
This commit is contained in:
parent
b1941c33f7
commit
b1b0219f04
@ -3,7 +3,6 @@ package gui
|
|||||||
import (
|
import (
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
"github.com/davecgh/go-spew/spew"
|
|
||||||
"github.com/jesseduffield/gocui"
|
"github.com/jesseduffield/gocui"
|
||||||
"github.com/jesseduffield/lazygit/pkg/commands"
|
"github.com/jesseduffield/lazygit/pkg/commands"
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
|
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
|
||||||
@ -122,7 +121,7 @@ func (gui *Gui) reflogUndo(g *gocui.Gui, v *gocui.View) error {
|
|||||||
{
|
{
|
||||||
regexStr: `^commit|^rebase -i \(start\)`,
|
regexStr: `^commit|^rebase -i \(start\)`,
|
||||||
action: func(match []string, commitSha string, prevCommitSha string) (bool, error) {
|
action: func(match []string, commitSha string, prevCommitSha string) (bool, error) {
|
||||||
return true, gui.resetToRef(prevCommitSha, "hard")
|
return true, gui.handleHardResetWithAutoStash(prevCommitSha)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -131,8 +130,6 @@ func (gui *Gui) reflogUndo(g *gocui.Gui, v *gocui.View) error {
|
|||||||
for _, action := range reflogActions {
|
for _, action := range reflogActions {
|
||||||
re := regexp.MustCompile(action.regexStr)
|
re := regexp.MustCompile(action.regexStr)
|
||||||
match := re.FindStringSubmatch(reflogCommit.Name)
|
match := re.FindStringSubmatch(reflogCommit.Name)
|
||||||
gui.Log.Warn(action.regexStr)
|
|
||||||
gui.Log.Warn(spew.Sdump(match))
|
|
||||||
if len(match) == 0 {
|
if len(match) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -140,7 +137,6 @@ func (gui *Gui) reflogUndo(g *gocui.Gui, v *gocui.View) error {
|
|||||||
if len(gui.State.ReflogCommits)-1 >= i+1 {
|
if len(gui.State.ReflogCommits)-1 >= i+1 {
|
||||||
prevCommitSha = gui.State.ReflogCommits[i+1].Sha
|
prevCommitSha = gui.State.ReflogCommits[i+1].Sha
|
||||||
}
|
}
|
||||||
gui.Log.Warn(prevCommitSha)
|
|
||||||
|
|
||||||
done, err := action.action(match, reflogCommit.Sha, prevCommitSha)
|
done, err := action.action(match, reflogCommit.Sha, prevCommitSha)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -154,3 +150,40 @@ func (gui *Gui) reflogUndo(g *gocui.Gui, v *gocui.View) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) handleHardResetWithAutoStash(commitSha string) error {
|
||||||
|
// if we have any modified tracked files we need to ask the user if they want us to stash for them
|
||||||
|
dirtyWorkingTree := false
|
||||||
|
for _, file := range gui.State.Files {
|
||||||
|
if file.Tracked {
|
||||||
|
dirtyWorkingTree = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if dirtyWorkingTree {
|
||||||
|
// offer to autostash changes
|
||||||
|
return gui.createConfirmationPanel(gui.g, gui.getBranchesView(), true, gui.Tr.SLocalize("AutoStashTitle"), gui.Tr.SLocalize("AutoStashPrompt"), func(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
if err := gui.GitCommand.StashSave(gui.Tr.SLocalize("StashPrefix") + commitSha); err != nil {
|
||||||
|
return gui.createErrorPanel(g, err.Error())
|
||||||
|
}
|
||||||
|
if err := gui.resetToRef(commitSha, "hard"); err != nil {
|
||||||
|
return gui.createErrorPanel(g, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gui.GitCommand.StashDo(0, "pop"); err != nil {
|
||||||
|
if err := gui.refreshSidePanels(g); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return gui.createErrorPanel(g, err.Error())
|
||||||
|
}
|
||||||
|
return gui.refreshSidePanels(g)
|
||||||
|
}, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gui.resetToRef(commitSha, "hard"); err != nil {
|
||||||
|
return gui.createErrorPanel(gui.g, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return gui.refreshSidePanels(gui.g)
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user