1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-01-10 04:07:18 +02:00
lazygit/pkg/gui/controllers/workspace_reset_controller.go

138 lines
3.9 KiB
Go
Raw Normal View History

package controllers
import (
"fmt"
"github.com/jesseduffield/lazygit/pkg/gui/style"
"github.com/jesseduffield/lazygit/pkg/gui/types"
)
// this is in its own file given that the workspace controller file is already quite long
func (self *FilesController) createResetMenu() error {
red := style.FgRed
2022-05-08 13:30:43 +02:00
nukeStr := "git reset --hard HEAD && git clean -fd"
2023-03-23 04:04:57 +02:00
if len(self.c.Model().Submodules) > 0 {
nukeStr = fmt.Sprintf("%s (%s)", nukeStr, self.c.Tr.AndResetSubmodules)
}
menuItems := []*types.MenuItem{
{
LabelColumns: []string{
self.c.Tr.DiscardAllChangesToAllFiles,
red.Sprint(nukeStr),
},
OnPress: func() error {
self.c.LogAction(self.c.Tr.Actions.NukeWorkingTree)
2023-03-23 04:04:57 +02:00
if err := self.c.Git().WorkingTree.ResetAndClean(); err != nil {
return self.c.Error(err)
}
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}})
},
Key: 'x',
Tooltip: self.c.Tr.NukeDescription,
},
{
LabelColumns: []string{
self.c.Tr.DiscardAnyUnstagedChanges,
red.Sprint("git checkout -- ."),
},
OnPress: func() error {
self.c.LogAction(self.c.Tr.Actions.DiscardUnstagedFileChanges)
2023-03-23 04:04:57 +02:00
if err := self.c.Git().WorkingTree.DiscardAnyUnstagedFileChanges(); err != nil {
return self.c.Error(err)
}
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}})
},
Key: 'u',
},
{
LabelColumns: []string{
self.c.Tr.DiscardUntrackedFiles,
red.Sprint("git clean -fd"),
},
OnPress: func() error {
self.c.LogAction(self.c.Tr.Actions.RemoveUntrackedFiles)
2023-03-23 04:04:57 +02:00
if err := self.c.Git().WorkingTree.RemoveUntrackedFiles(); err != nil {
return self.c.Error(err)
}
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}})
},
Key: 'c',
},
2022-05-08 13:30:43 +02:00
{
LabelColumns: []string{
self.c.Tr.DiscardStagedChanges,
2022-05-08 13:30:43 +02:00
red.Sprint("stash staged and drop stash"),
},
2022-05-15 12:16:20 +02:00
Tooltip: self.c.Tr.DiscardStagedChangesDescription,
2022-05-08 13:30:43 +02:00
OnPress: func() error {
self.c.LogAction(self.c.Tr.Actions.RemoveStagedFiles)
2023-03-23 09:47:29 +02:00
if !self.c.Helpers().WorkingTree.IsWorkingTreeDirty() {
2022-05-08 13:30:43 +02:00
return self.c.ErrorMsg(self.c.Tr.NoTrackedStagedFilesStash)
}
2023-03-23 04:04:57 +02:00
if err := self.c.Git().Stash.SaveStagedChanges("[lazygit] tmp stash"); err != nil {
2022-05-08 13:30:43 +02:00
return self.c.Error(err)
}
2023-03-23 04:04:57 +02:00
if err := self.c.Git().Stash.DropNewest(); err != nil {
2022-05-08 13:30:43 +02:00
return self.c.Error(err)
}
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}})
},
Key: 'S',
},
{
LabelColumns: []string{
self.c.Tr.SoftReset,
red.Sprint("git reset --soft HEAD"),
},
OnPress: func() error {
self.c.LogAction(self.c.Tr.Actions.SoftReset)
2023-03-23 04:04:57 +02:00
if err := self.c.Git().WorkingTree.ResetSoft("HEAD"); err != nil {
return self.c.Error(err)
}
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}})
},
Key: 's',
},
{
LabelColumns: []string{
"mixed reset",
red.Sprint("git reset --mixed HEAD"),
},
OnPress: func() error {
self.c.LogAction(self.c.Tr.Actions.MixedReset)
2023-03-23 04:04:57 +02:00
if err := self.c.Git().WorkingTree.ResetMixed("HEAD"); err != nil {
return self.c.Error(err)
}
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}})
},
Key: 'm',
},
{
LabelColumns: []string{
self.c.Tr.HardReset,
red.Sprint("git reset --hard HEAD"),
},
OnPress: func() error {
self.c.LogAction(self.c.Tr.Actions.HardReset)
2023-03-23 04:04:57 +02:00
if err := self.c.Git().WorkingTree.ResetHard("HEAD"); err != nil {
return self.c.Error(err)
}
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}})
},
Key: 'h',
},
}
return self.c.Menu(types.CreateMenuOptions{Title: "", Items: menuItems})
}