diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2022-02-26 19:26:39 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2022-03-17 19:13:40 +1100 |
commit | 8fd6338527dff7ca3e5a9c5b55309d74d14615ef (patch) | |
tree | d14c01f5b575655416c97a407c90d78ea2c7eb72 /pkg/gui/controllers | |
parent | ee1337b93190d7354b64ce84bf5c9bccba48fe4e (diff) |
move workspace reset menu into controller
Diffstat (limited to 'pkg/gui/controllers')
-rw-r--r-- | pkg/gui/controllers/files_controller.go | 11 | ||||
-rw-r--r-- | pkg/gui/controllers/workspace_reset_controller.go | 108 |
2 files changed, 116 insertions, 3 deletions
diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index e12554a3d..5f6ccec7e 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -122,11 +122,16 @@ func (self *FilesController) GetKeybindings(opts types.KeybindingsOpts) []*types }, { Key: opts.GetKey(opts.Config.Commits.ViewResetOptions), - Handler: self.createResetMenu, + Handler: self.createResetToUpstreamMenu, Description: self.c.Tr.LcViewResetToUpstreamOptions, OpensMenu: true, }, - // here + { + Key: opts.GetKey(opts.Config.Files.ViewResetOptions), + Handler: self.createResetMenu, + Description: self.c.Tr.LcViewResetOptions, + OpensMenu: true, + }, { Key: opts.GetKey(opts.Config.Files.ToggleTreeView), Handler: self.toggleTreeView, @@ -571,7 +576,7 @@ func (self *FilesController) stash() error { return self.handleStashSave(self.git.Stash.Save) } -func (self *FilesController) createResetMenu() error { +func (self *FilesController) createResetToUpstreamMenu() error { return self.helpers.Refs.CreateGitResetMenu("@{upstream}") } diff --git a/pkg/gui/controllers/workspace_reset_controller.go b/pkg/gui/controllers/workspace_reset_controller.go new file mode 100644 index 000000000..9153e34e8 --- /dev/null +++ b/pkg/gui/controllers/workspace_reset_controller.go @@ -0,0 +1,108 @@ +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 + + nukeStr := "reset --hard HEAD && git clean -fd" + if len(self.model.Submodules) > 0 { + nukeStr = fmt.Sprintf("%s (%s)", nukeStr, self.c.Tr.LcAndResetSubmodules) + } + + menuItems := []*types.MenuItem{ + { + DisplayStrings: []string{ + self.c.Tr.LcDiscardAllChangesToAllFiles, + red.Sprint(nukeStr), + }, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.NukeWorkingTree) + if err := self.git.WorkingTree.ResetAndClean(); err != nil { + return self.c.Error(err) + } + + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}}) + }, + }, + { + DisplayStrings: []string{ + self.c.Tr.LcDiscardAnyUnstagedChanges, + red.Sprint("git checkout -- ."), + }, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.DiscardUnstagedFileChanges) + if err := self.git.WorkingTree.DiscardAnyUnstagedFileChanges(); err != nil { + return self.c.Error(err) + } + + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}}) + }, + }, + { + DisplayStrings: []string{ + self.c.Tr.LcDiscardUntrackedFiles, + red.Sprint("git clean -fd"), + }, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.RemoveUntrackedFiles) + if err := self.git.WorkingTree.RemoveUntrackedFiles(); err != nil { + return self.c.Error(err) + } + + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}}) + }, + }, + { + DisplayStrings: []string{ + self.c.Tr.LcSoftReset, + red.Sprint("git reset --soft HEAD"), + }, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.SoftReset) + if err := self.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}}) + }, + }, + { + DisplayStrings: []string{ + "mixed reset", + red.Sprint("git reset --mixed HEAD"), + }, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.MixedReset) + if err := self.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}}) + }, + }, + { + DisplayStrings: []string{ + self.c.Tr.LcHardReset, + red.Sprint("git reset --hard HEAD"), + }, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.HardReset) + if err := self.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}}) + }, + }, + } + + return self.c.Menu(types.CreateMenuOptions{Title: "", Items: menuItems}) +} |