From 45dab51214d7deca689279a6a162d80ee27befc8 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 26 Mar 2022 16:42:56 +1100 Subject: [PATCH] add basic commits controller for handling actions that apply to all commit contexts --- docs/keybindings/Keybindings_en.md | 21 +- docs/keybindings/Keybindings_nl.md | 21 +- docs/keybindings/Keybindings_pl.md | 21 +- docs/keybindings/Keybindings_zh.md | 23 +- pkg/gui/context/local_commits_context.go | 4 + pkg/gui/context/reflog_commits_context.go | 4 + pkg/gui/context/sub_commits_context.go | 4 + pkg/gui/controllers.go | 15 +- .../controllers/basic_commits_controller.go | 236 ++++++++++++++++++ .../controllers/local_commits_controller.go | 166 ------------ pkg/gui/controllers/reflog_controller.go | 103 -------- pkg/gui/controllers/sub_commits_controller.go | 114 --------- pkg/i18n/chinese.go | 1 - pkg/i18n/english.go | 2 - 14 files changed, 311 insertions(+), 424 deletions(-) create mode 100644 pkg/gui/controllers/basic_commits_controller.go delete mode 100644 pkg/gui/controllers/reflog_controller.go delete mode 100644 pkg/gui/controllers/sub_commits_controller.go diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md index 65f217f73..836bbf791 100644 --- a/docs/keybindings/Keybindings_en.md +++ b/docs/keybindings/Keybindings_en.md @@ -90,8 +90,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
   ctrl+o: copy commit SHA to clipboard
   space: checkout commit
-  g: view reset options
-  n: new branch
+  y: copy commit attribute
+  o: open commit in browser
+  n: create new branch off of commit
+  g: reset to this commit
   c: copy commit (cherry-pick)
   C: copy commit range (cherry-pick)
   ctrl+r: reset cherry-picked (copied) commits selection
@@ -147,16 +149,16 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
   ctrl+k: move commit up one
   A: amend commit with staged changes
   t: revert commit
-  n: create new branch off of commit
-  c: copy commit (cherry-pick)
-  C: copy commit range (cherry-pick)
   v: paste commits (cherry-pick)
   ctrl+l: open log menu
-  g: reset to this commit
-  space: checkout commit
   T: tag commit
+  space: checkout commit
   y: copy commit attribute
   o: open commit in browser
+  n: create new branch off of commit
+  g: reset to this commit
+  c: copy commit (cherry-pick)
+  C: copy commit range (cherry-pick)
   enter: view selected item's files
 
@@ -165,7 +167,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
   ctrl+o: copy commit SHA to clipboard
   space: checkout commit
-  g: view reset options
+  y: copy commit attribute
+  o: open commit in browser
+  n: create new branch off of commit
+  g: reset to this commit
   c: copy commit (cherry-pick)
   C: copy commit range (cherry-pick)
   ctrl+r: reset cherry-picked (copied) commits selection
diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md
index bec3e35ad..8fbf16ccd 100644
--- a/docs/keybindings/Keybindings_nl.md
+++ b/docs/keybindings/Keybindings_nl.md
@@ -130,8 +130,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
 
   ctrl+o: kopieer commit SHA naar klembord
   space: checkout commit
-  g: bekijk reset opties
-  n: nieuwe branch
+  y: copy commit attribute
+  o: open commit in browser
+  n: creëer nieuwe branch van commit
+  g: reset naar deze commit
   c: kopieer commit (cherry-pick)
   C: kopieer commit reeks (cherry-pick)
   ctrl+r: reset cherry-picked (gekopieerde) commits selectie
@@ -187,16 +189,16 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
   ctrl+k: verplaats commit 1 naar boven
   A: wijzig commit met staged veranderingen
   t: commit ongedaan maken
-  n: creëer nieuwe branch van commit
-  c: kopieer commit (cherry-pick)
-  C: kopieer commit reeks (cherry-pick)
   v: plak commits (cherry-pick)
   ctrl+l: open log menu
-  g: reset naar deze commit
-  space: checkout commit
   T: tag commit
+  space: checkout commit
   y: copy commit attribute
   o: open commit in browser
+  n: creëer nieuwe branch van commit
+  g: reset naar deze commit
+  c: kopieer commit (cherry-pick)
+  C: kopieer commit reeks (cherry-pick)
   enter: bekijk gecommite bestanden
 
@@ -205,7 +207,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
   ctrl+o: kopieer commit SHA naar klembord
   space: checkout commit
-  g: bekijk reset opties
+  y: copy commit attribute
+  o: open commit in browser
+  n: creëer nieuwe branch van commit
+  g: reset naar deze commit
   c: kopieer commit (cherry-pick)
   C: kopieer commit reeks (cherry-pick)
   ctrl+r: reset cherry-picked (gekopieerde) commits selectie
diff --git a/docs/keybindings/Keybindings_pl.md b/docs/keybindings/Keybindings_pl.md
index 3e9443b4e..93f91050a 100644
--- a/docs/keybindings/Keybindings_pl.md
+++ b/docs/keybindings/Keybindings_pl.md
@@ -60,16 +60,16 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
   ctrl+k: przenieś commit 1 w górę
   A: popraw commit zmianami z poczekalni
   t: odwróć commit
-  n: create new branch off of commit
-  c: kopiuj commit (przebieranie)
-  C: kopiuj zakres commitów (przebieranie)
   v: wklej commity (przebieranie)
   ctrl+l: open log menu
-  g: zresetuj do tego commita
-  space: checkout commit
   T: tag commit
+  space: checkout commit
   y: copy commit attribute
   o: open commit in browser
+  n: create new branch off of commit
+  g: zresetuj do tego commita
+  c: kopiuj commit (przebieranie)
+  C: kopiuj zakres commitów (przebieranie)
   enter: przeglądaj pliki commita
 
@@ -78,7 +78,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
   ctrl+o: copy commit SHA to clipboard
   space: checkout commit
-  g: wyświetl opcje resetu
+  y: copy commit attribute
+  o: open commit in browser
+  n: create new branch off of commit
+  g: zresetuj do tego commita
   c: kopiuj commit (przebieranie)
   C: kopiuj zakres commitów (przebieranie)
   ctrl+r: reset cherry-picked (copied) commits selection
@@ -140,8 +143,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
 
   ctrl+o: copy commit SHA to clipboard
   space: checkout commit
-  g: wyświetl opcje resetu
-  n: nowa gałąź
+  y: copy commit attribute
+  o: open commit in browser
+  n: create new branch off of commit
+  g: zresetuj do tego commita
   c: kopiuj commit (przebieranie)
   C: kopiuj zakres commitów (przebieranie)
   ctrl+r: reset cherry-picked (copied) commits selection
diff --git a/docs/keybindings/Keybindings_zh.md b/docs/keybindings/Keybindings_zh.md
index ba672a858..7e1b1c407 100644
--- a/docs/keybindings/Keybindings_zh.md
+++ b/docs/keybindings/Keybindings_zh.md
@@ -126,8 +126,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
 
   ctrl+o: 将提交的 SHA 复制到剪贴板
   space: 检出提交
-  g: 查看重置选项
-  n: 新分支
+  y: copy commit attribute
+  o: 在浏览器中打开提交
+  n: 从提交创建新分支
+  g: 重置为此提交
   c: 复制提交(拣选)
   C: 复制提交范围(拣选)
   ctrl+r: 重置已拣选(复制)的提交
@@ -173,7 +175,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
 
   ctrl+o: 将提交的 SHA 复制到剪贴板
   space: 检出提交
-  g: 查看重置选项
+  y: copy commit attribute
+  o: 在浏览器中打开提交
+  n: 从提交创建新分支
+  g: 重置为此提交
   c: 复制提交(拣选)
   C: 复制提交范围(拣选)
   ctrl+r: 重置已拣选(复制)的提交
@@ -199,16 +204,16 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
   ctrl+k: 上移提交
   A: 用已暂存的更改来修补提交
   t: 还原提交
-  n: 从提交创建新分支
-  c: 复制提交(拣选)
-  C: 复制提交范围(拣选)
   v: 粘贴提交(拣选)
   ctrl+l: 打开日志菜单
-  g: 重置为此提交
-  space: 检出提交
   T: 标签提交
+  space: 检出提交
   y: copy commit attribute
-  o: open commit in browser
+  o: 在浏览器中打开提交
+  n: 从提交创建新分支
+  g: 重置为此提交
+  c: 复制提交(拣选)
+  C: 复制提交范围(拣选)
   enter: 查看提交的文件
 
diff --git a/pkg/gui/context/local_commits_context.go b/pkg/gui/context/local_commits_context.go index 46e3be2cd..cc7a2a0d2 100644 --- a/pkg/gui/context/local_commits_context.go +++ b/pkg/gui/context/local_commits_context.go @@ -108,3 +108,7 @@ func (self *LocalCommitsViewModel) SetShowWholeGitGraph(value bool) { func (self *LocalCommitsViewModel) GetShowWholeGitGraph() bool { return self.showWholeGitGraph } + +func (self *LocalCommitsViewModel) GetCommits() []*models.Commit { + return self.getModel() +} diff --git a/pkg/gui/context/reflog_commits_context.go b/pkg/gui/context/reflog_commits_context.go index 815805515..a1ad6cfda 100644 --- a/pkg/gui/context/reflog_commits_context.go +++ b/pkg/gui/context/reflog_commits_context.go @@ -70,3 +70,7 @@ func (self *ReflogCommitsContext) GetSelectedRefName() string { return item.RefName() } + +func (self *ReflogCommitsContext) GetCommits() []*models.Commit { + return self.getModel() +} diff --git a/pkg/gui/context/sub_commits_context.go b/pkg/gui/context/sub_commits_context.go index 93a0c3593..315093f8f 100644 --- a/pkg/gui/context/sub_commits_context.go +++ b/pkg/gui/context/sub_commits_context.go @@ -72,3 +72,7 @@ func (self *SubCommitsContext) GetSelectedRefName() string { return item.RefName() } + +func (self *SubCommitsContext) GetCommits() []*models.Commit { + return self.getModel() +} diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index 3e33783e1..13a0eedb5 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -74,9 +74,6 @@ func (gui *Gui) resetControllers() { bisectController := controllers.NewBisectController(common) - reflogController := controllers.NewReflogController(common) - subCommitsController := controllers.NewSubCommitsController(common) - getSavedCommitMessage := func() string { return gui.State.savedCommitMessage } @@ -159,13 +156,21 @@ func (gui *Gui) resetControllers() { controllers.AttachControllers(context, commitishControllerFactory.Create(context)) } + basicCommitsControllerFactory := controllers.NewBasicCommitsControllerFactory(common) + + for _, context := range []controllers.ContainsCommits{ + gui.State.Contexts.LocalCommits, + gui.State.Contexts.ReflogCommits, + gui.State.Contexts.SubCommits, + } { + controllers.AttachControllers(context, basicCommitsControllerFactory.Create(context)) + } + controllers.AttachControllers(gui.State.Contexts.Branches, branchesController, gitFlowController) controllers.AttachControllers(gui.State.Contexts.Files, gui.Controllers.Files, filesRemoveController) controllers.AttachControllers(gui.State.Contexts.Tags, gui.Controllers.Tags) controllers.AttachControllers(gui.State.Contexts.Submodules, gui.Controllers.Submodules) controllers.AttachControllers(gui.State.Contexts.LocalCommits, gui.Controllers.LocalCommits, bisectController) - controllers.AttachControllers(gui.State.Contexts.ReflogCommits, reflogController) - controllers.AttachControllers(gui.State.Contexts.SubCommits, subCommitsController) controllers.AttachControllers(gui.State.Contexts.CommitFiles, commitFilesController) controllers.AttachControllers(gui.State.Contexts.Remotes, gui.Controllers.Remotes) controllers.AttachControllers(gui.State.Contexts.Stash, stashController) diff --git a/pkg/gui/controllers/basic_commits_controller.go b/pkg/gui/controllers/basic_commits_controller.go new file mode 100644 index 000000000..c59686126 --- /dev/null +++ b/pkg/gui/controllers/basic_commits_controller.go @@ -0,0 +1,236 @@ +package controllers + +import ( + "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/commands/models" + "github.com/jesseduffield/lazygit/pkg/gui/types" +) + +// This controller is for all contexts that contain a list of commits. + +type BasicCommitsControllerFactory struct { + controllerCommon *controllerCommon +} + +var _ types.IController = &BasicCommitsController{} + +type ContainsCommits interface { + types.Context + GetSelected() *models.Commit + GetCommits() []*models.Commit + GetSelectedLineIdx() int +} + +type BasicCommitsController struct { + baseController + *controllerCommon + context ContainsCommits +} + +func NewBasicCommitsControllerFactory( + common *controllerCommon, +) *BasicCommitsControllerFactory { + return &BasicCommitsControllerFactory{ + controllerCommon: common, + } +} + +func (self *BasicCommitsControllerFactory) Create(context ContainsCommits) *BasicCommitsController { + return &BasicCommitsController{ + baseController: baseController{}, + controllerCommon: self.controllerCommon, + context: context, + } +} + +func (self *BasicCommitsController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding { + bindings := []*types.Binding{ + { + Key: opts.GetKey(opts.Config.Commits.CheckoutCommit), + Handler: self.checkSelected(self.checkout), + Description: self.c.Tr.LcCheckoutCommit, + }, + { + Key: opts.GetKey(opts.Config.Commits.CopyCommitAttributeToClipboard), + Handler: self.checkSelected(self.copyCommitAttribute), + Description: self.c.Tr.LcCopyCommitAttributeToClipboard, + OpensMenu: true, + }, + { + Key: opts.GetKey(opts.Config.Commits.OpenInBrowser), + Handler: self.checkSelected(self.openInBrowser), + Description: self.c.Tr.LcOpenCommitInBrowser, + }, + { + Key: opts.GetKey(opts.Config.Universal.New), + Modifier: gocui.ModNone, + Handler: self.checkSelected(self.newBranch), + Description: self.c.Tr.LcCreateNewBranchFromCommit, + }, + { + Key: opts.GetKey(opts.Config.Commits.ViewResetOptions), + Handler: self.checkSelected(self.createResetMenu), + Description: self.c.Tr.LcResetToThisCommit, + }, + { + Key: opts.GetKey(opts.Config.Commits.CherryPickCopy), + Handler: self.checkSelected(self.copy), + Description: self.c.Tr.LcCherryPickCopy, + }, + { + Key: opts.GetKey(opts.Config.Commits.CherryPickCopyRange), + Handler: self.checkSelected(self.copyRange), + Description: self.c.Tr.LcCherryPickCopyRange, + }, + { + Key: opts.GetKey(opts.Config.Commits.ResetCherryPick), + Handler: self.helpers.CherryPick.Reset, + Description: self.c.Tr.LcResetCherryPick, + }, + } + + return bindings +} + +func (self *BasicCommitsController) checkSelected(callback func(*models.Commit) error) func() error { + return func() error { + commit := self.context.GetSelected() + if commit == nil { + return nil + } + + return callback(commit) + } +} + +func (self *BasicCommitsController) Context() types.Context { + return self.context +} + +func (self *BasicCommitsController) copyCommitAttribute(commit *models.Commit) error { + return self.c.Menu(types.CreateMenuOptions{ + Title: self.c.Tr.Actions.CopyCommitAttributeToClipboard, + Items: []*types.MenuItem{ + { + DisplayString: self.c.Tr.LcCommitSha, + OnPress: func() error { + return self.copyCommitSHAToClipboard(commit) + }, + }, + { + DisplayString: self.c.Tr.LcCommitURL, + OnPress: func() error { + return self.copyCommitURLToClipboard(commit) + }, + }, + { + DisplayString: self.c.Tr.LcCommitDiff, + OnPress: func() error { + return self.copyCommitDiffToClipboard(commit) + }, + }, + { + DisplayString: self.c.Tr.LcCommitMessage, + OnPress: func() error { + return self.copyCommitMessageToClipboard(commit) + }, + }, + }, + }) +} + +func (self *BasicCommitsController) copyCommitSHAToClipboard(commit *models.Commit) error { + self.c.LogAction(self.c.Tr.Actions.CopyCommitSHAToClipboard) + if err := self.os.CopyToClipboard(commit.Sha); err != nil { + return self.c.Error(err) + } + + self.c.Toast(self.c.Tr.CommitSHACopiedToClipboard) + return nil +} + +func (self *BasicCommitsController) copyCommitURLToClipboard(commit *models.Commit) error { + url, err := self.helpers.Host.GetCommitURL(commit.Sha) + if err != nil { + return err + } + + self.c.LogAction(self.c.Tr.Actions.CopyCommitURLToClipboard) + if err := self.os.CopyToClipboard(url); err != nil { + return self.c.Error(err) + } + + self.c.Toast(self.c.Tr.CommitURLCopiedToClipboard) + return nil +} + +func (self *BasicCommitsController) copyCommitDiffToClipboard(commit *models.Commit) error { + diff, err := self.git.Commit.GetCommitDiff(commit.Sha) + if err != nil { + return self.c.Error(err) + } + + self.c.LogAction(self.c.Tr.Actions.CopyCommitDiffToClipboard) + if err := self.os.CopyToClipboard(diff); err != nil { + return self.c.Error(err) + } + + self.c.Toast(self.c.Tr.CommitDiffCopiedToClipboard) + return nil +} + +func (self *BasicCommitsController) copyCommitMessageToClipboard(commit *models.Commit) error { + message, err := self.git.Commit.GetCommitMessage(commit.Sha) + if err != nil { + return self.c.Error(err) + } + + self.c.LogAction(self.c.Tr.Actions.CopyCommitMessageToClipboard) + if err := self.os.CopyToClipboard(message); err != nil { + return self.c.Error(err) + } + + self.c.Toast(self.c.Tr.CommitMessageCopiedToClipboard) + return nil +} + +func (self *BasicCommitsController) openInBrowser(commit *models.Commit) error { + url, err := self.helpers.Host.GetCommitURL(commit.Sha) + if err != nil { + return self.c.Error(err) + } + + self.c.LogAction(self.c.Tr.Actions.OpenCommitInBrowser) + if err := self.os.OpenLink(url); err != nil { + return self.c.Error(err) + } + + return nil +} + +func (self *BasicCommitsController) newBranch(commit *models.Commit) error { + return self.helpers.Refs.NewBranch(commit.RefName(), commit.Description(), "") +} + +func (self *BasicCommitsController) createResetMenu(commit *models.Commit) error { + return self.helpers.Refs.CreateGitResetMenu(commit.Sha) +} + +func (self *BasicCommitsController) checkout(commit *models.Commit) error { + return self.c.Ask(types.AskOpts{ + Title: self.c.Tr.LcCheckoutCommit, + Prompt: self.c.Tr.SureCheckoutThisCommit, + HandleConfirm: func() error { + self.c.LogAction(self.c.Tr.Actions.CheckoutCommit) + return self.helpers.Refs.CheckoutRef(commit.Sha, types.CheckoutRefOptions{}) + }, + }) +} + +func (self *BasicCommitsController) copy(commit *models.Commit) error { + return self.helpers.CherryPick.Copy(commit, self.context.GetCommits(), self.context) +} + +func (self *BasicCommitsController) copyRange(*models.Commit) error { + return self.helpers.CherryPick.CopyRange(self.context.GetSelectedLineIdx(), self.model.Commits, self.context) +} diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go index 2c3618b82..41433068d 100644 --- a/pkg/gui/controllers/local_commits_controller.go +++ b/pkg/gui/controllers/local_commits_controller.go @@ -3,7 +3,6 @@ package controllers import ( "fmt" - "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/gui/context" "github.com/jesseduffield/lazygit/pkg/gui/types" @@ -101,22 +100,6 @@ func (self *LocalCommitsController) GetKeybindings(opts types.KeybindingsOpts) [ Handler: self.checkSelected(self.revert), Description: self.c.Tr.LcRevertCommit, }, - { - Key: opts.GetKey(opts.Config.Universal.New), - Modifier: gocui.ModNone, - Handler: self.checkSelected(self.newBranch), - Description: self.c.Tr.LcCreateNewBranchFromCommit, - }, - { - Key: opts.GetKey(opts.Config.Commits.CherryPickCopy), - Handler: self.checkSelected(self.copy), - Description: self.c.Tr.LcCherryPickCopy, - }, - { - Key: opts.GetKey(opts.Config.Commits.CherryPickCopyRange), - Handler: self.checkSelected(self.copyRange), - Description: self.c.Tr.LcCherryPickCopyRange, - }, { Key: opts.GetKey(opts.Config.Commits.PasteCommits), Handler: opts.Guards.OutsideFilterMode(self.paste), @@ -149,32 +132,11 @@ func (self *LocalCommitsController) GetKeybindings(opts types.KeybindingsOpts) [ Description: self.c.Tr.LcOpenLogMenu, OpensMenu: true, }, - { - Key: opts.GetKey(opts.Config.Commits.ViewResetOptions), - Handler: self.checkSelected(self.createResetMenu), - Description: self.c.Tr.LcResetToThisCommit, - }, - { - Key: opts.GetKey(opts.Config.Commits.CheckoutCommit), - Handler: self.checkSelected(self.checkout), - Description: self.c.Tr.LcCheckoutCommit, - }, { Key: opts.GetKey(opts.Config.Commits.TagCommit), Handler: self.checkSelected(self.createTag), Description: self.c.Tr.LcTagCommit, }, - { - Key: opts.GetKey(opts.Config.Commits.CopyCommitAttributeToClipboard), - Handler: self.checkSelected(self.copyCommitAttribute), - Description: self.c.Tr.LcCopyCommitAttributeToClipboard, - OpensMenu: true, - }, - { - Key: opts.GetKey(opts.Config.Commits.OpenInBrowser), - Handler: self.checkSelected(self.openInBrowser), - Description: self.c.Tr.LcOpenCommitInBrowser, - }, }...) return bindings @@ -557,21 +519,6 @@ func (self *LocalCommitsController) createTag(commit *models.Commit) error { return self.helpers.Tags.CreateTagMenu(commit.Sha, func() {}) } -func (self *LocalCommitsController) checkout(commit *models.Commit) error { - return self.c.Ask(types.AskOpts{ - Title: self.c.Tr.LcCheckoutCommit, - Prompt: self.c.Tr.SureCheckoutThisCommit, - HandleConfirm: func() error { - self.c.LogAction(self.c.Tr.Actions.CheckoutCommit) - return self.helpers.Refs.CheckoutRef(commit.Sha, types.CheckoutRefOptions{}) - }, - }) -} - -func (self *LocalCommitsController) createResetMenu(commit *models.Commit) error { - return self.helpers.Refs.CreateGitResetMenu(commit.Sha) -} - func (self *LocalCommitsController) openSearch() error { // we usually lazyload these commits but now that we're searching we need to load them now if self.context().GetLimitCommits() { @@ -600,93 +547,6 @@ func (self *LocalCommitsController) gotoBottom() error { return nil } -func (self *LocalCommitsController) copyCommitAttribute(commit *models.Commit) error { - return self.c.Menu(types.CreateMenuOptions{ - Title: self.c.Tr.Actions.CopyCommitAttributeToClipboard, - Items: []*types.MenuItem{ - { - DisplayString: self.c.Tr.LcCommitSha, - OnPress: func() error { - return self.copyCommitSHAToClipboard(commit) - }, - }, - { - DisplayString: self.c.Tr.LcCommitURL, - OnPress: func() error { - return self.copyCommitURLToClipboard(commit) - }, - }, - { - DisplayString: self.c.Tr.LcCommitDiff, - OnPress: func() error { - return self.copyCommitDiffToClipboard(commit) - }, - }, - { - DisplayString: self.c.Tr.LcCommitMessage, - OnPress: func() error { - return self.copyCommitMessageToClipboard(commit) - }, - }, - }, - }) -} - -func (self *LocalCommitsController) copyCommitSHAToClipboard(commit *models.Commit) error { - self.c.LogAction(self.c.Tr.Actions.CopyCommitSHAToClipboard) - if err := self.os.CopyToClipboard(commit.Sha); err != nil { - return self.c.Error(err) - } - - self.c.Toast(self.c.Tr.CommitSHACopiedToClipboard) - return nil -} - -func (self *LocalCommitsController) copyCommitURLToClipboard(commit *models.Commit) error { - url, err := self.helpers.Host.GetCommitURL(commit.Sha) - if err != nil { - return err - } - - self.c.LogAction(self.c.Tr.Actions.CopyCommitURLToClipboard) - if err := self.os.CopyToClipboard(url); err != nil { - return self.c.Error(err) - } - - self.c.Toast(self.c.Tr.CommitURLCopiedToClipboard) - return nil -} - -func (self *LocalCommitsController) copyCommitDiffToClipboard(commit *models.Commit) error { - diff, err := self.git.Commit.GetCommitDiff(commit.Sha) - if err != nil { - return self.c.Error(err) - } - - self.c.LogAction(self.c.Tr.Actions.CopyCommitDiffToClipboard) - if err := self.os.CopyToClipboard(diff); err != nil { - return self.c.Error(err) - } - - self.c.Toast(self.c.Tr.CommitDiffCopiedToClipboard) - return nil -} - -func (self *LocalCommitsController) copyCommitMessageToClipboard(commit *models.Commit) error { - message, err := self.git.Commit.GetCommitMessage(commit.Sha) - if err != nil { - return self.c.Error(err) - } - - self.c.LogAction(self.c.Tr.Actions.CopyCommitMessageToClipboard) - if err := self.os.CopyToClipboard(message); err != nil { - return self.c.Error(err) - } - - self.c.Toast(self.c.Tr.CommitMessageCopiedToClipboard) - return nil -} - func (self *LocalCommitsController) handleOpenLogMenu() error { return self.c.Menu(types.CreateMenuOptions{ Title: self.c.Tr.LogMenuTitle, @@ -770,20 +630,6 @@ func (self *LocalCommitsController) handleOpenLogMenu() error { }) } -func (self *LocalCommitsController) openInBrowser(commit *models.Commit) error { - url, err := self.helpers.Host.GetCommitURL(commit.Sha) - if err != nil { - return self.c.Error(err) - } - - self.c.LogAction(self.c.Tr.Actions.OpenCommitInBrowser) - if err := self.os.OpenLink(url); err != nil { - return self.c.Error(err) - } - - return nil -} - func (self *LocalCommitsController) checkSelected(callback func(*models.Commit) error) func() error { return func() error { commit := self.context().GetSelected() @@ -803,18 +649,6 @@ func (self *LocalCommitsController) context() *context.LocalCommitsContext { return self.contexts.LocalCommits } -func (self *LocalCommitsController) newBranch(commit *models.Commit) error { - return self.helpers.Refs.NewBranch(commit.RefName(), commit.Description(), "") -} - -func (self *LocalCommitsController) copy(commit *models.Commit) error { - return self.helpers.CherryPick.Copy(commit, self.model.Commits, self.context()) -} - -func (self *LocalCommitsController) copyRange(*models.Commit) error { - return self.helpers.CherryPick.CopyRange(self.context().GetSelectedLineIdx(), self.model.Commits, self.context()) -} - func (self *LocalCommitsController) paste() error { return self.helpers.CherryPick.Paste() } diff --git a/pkg/gui/controllers/reflog_controller.go b/pkg/gui/controllers/reflog_controller.go deleted file mode 100644 index 4085df635..000000000 --- a/pkg/gui/controllers/reflog_controller.go +++ /dev/null @@ -1,103 +0,0 @@ -package controllers - -import ( - "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context" - "github.com/jesseduffield/lazygit/pkg/gui/types" -) - -type ReflogController struct { - baseController - *controllerCommon -} - -var _ types.IController = &ReflogController{} - -func NewReflogController( - common *controllerCommon, -) *ReflogController { - return &ReflogController{ - baseController: baseController{}, - controllerCommon: common, - } -} - -func (self *ReflogController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding { - bindings := []*types.Binding{ - { - Key: opts.GetKey(opts.Config.Universal.Select), - Handler: self.checkSelected(self.checkout), - Description: self.c.Tr.LcCheckoutCommit, - }, - { - Key: opts.GetKey(opts.Config.Commits.ViewResetOptions), - Handler: self.checkSelected(self.openResetMenu), - Description: self.c.Tr.LcViewResetOptions, - OpensMenu: true, - }, - { - Key: opts.GetKey(opts.Config.Commits.CherryPickCopy), - Handler: opts.Guards.OutsideFilterMode(self.checkSelected(self.copy)), - Description: self.c.Tr.LcCherryPickCopy, - }, - { - Key: opts.GetKey(opts.Config.Commits.CherryPickCopyRange), - Handler: opts.Guards.OutsideFilterMode(self.checkSelected(self.copyRange)), - Description: self.c.Tr.LcCherryPickCopyRange, - }, - { - Key: opts.GetKey(opts.Config.Commits.ResetCherryPick), - Handler: self.helpers.CherryPick.Reset, - Description: self.c.Tr.LcResetCherryPick, - }, - } - - return bindings -} - -func (self *ReflogController) checkSelected(callback func(*models.Commit) error) func() error { - return func() error { - commit := self.context().GetSelected() - if commit == nil { - return nil - } - - return callback(commit) - } -} - -func (self *ReflogController) Context() types.Context { - return self.context() -} - -func (self *ReflogController) context() *context.ReflogCommitsContext { - return self.contexts.ReflogCommits -} - -func (self *ReflogController) checkout(commit *models.Commit) error { - err := self.c.Ask(types.AskOpts{ - Title: self.c.Tr.LcCheckoutCommit, - Prompt: self.c.Tr.SureCheckoutThisCommit, - HandleConfirm: func() error { - self.c.LogAction(self.c.Tr.Actions.CheckoutReflogCommit) - return self.helpers.Refs.CheckoutRef(commit.Sha, types.CheckoutRefOptions{}) - }, - }) - if err != nil { - return err - } - - return nil -} - -func (self *ReflogController) openResetMenu(commit *models.Commit) error { - return self.helpers.Refs.CreateGitResetMenu(commit.Sha) -} - -func (self *ReflogController) copy(commit *models.Commit) error { - return self.helpers.CherryPick.Copy(commit, self.model.FilteredReflogCommits, self.context()) -} - -func (self *ReflogController) copyRange(commit *models.Commit) error { - return self.helpers.CherryPick.CopyRange(self.context().GetSelectedLineIdx(), self.model.FilteredReflogCommits, self.context()) -} diff --git a/pkg/gui/controllers/sub_commits_controller.go b/pkg/gui/controllers/sub_commits_controller.go deleted file mode 100644 index 36d8b2315..000000000 --- a/pkg/gui/controllers/sub_commits_controller.go +++ /dev/null @@ -1,114 +0,0 @@ -package controllers - -import ( - "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/context" - "github.com/jesseduffield/lazygit/pkg/gui/types" -) - -type SubCommitsController struct { - baseController - *controllerCommon -} - -var _ types.IController = &SubCommitsController{} - -func NewSubCommitsController( - common *controllerCommon, -) *SubCommitsController { - return &SubCommitsController{ - baseController: baseController{}, - controllerCommon: common, - } -} - -func (self *SubCommitsController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding { - bindings := []*types.Binding{ - { - Key: opts.GetKey(opts.Config.Universal.Select), - Handler: self.checkSelected(self.checkout), - Description: self.c.Tr.LcCheckoutCommit, - }, - { - Key: opts.GetKey(opts.Config.Commits.ViewResetOptions), - Handler: self.checkSelected(self.openResetMenu), - Description: self.c.Tr.LcViewResetOptions, - OpensMenu: true, - }, - { - Key: opts.GetKey(opts.Config.Universal.New), - Handler: self.checkSelected(self.newBranch), - Description: self.c.Tr.LcNewBranch, - }, - { - Key: opts.GetKey(opts.Config.Commits.CherryPickCopy), - Handler: self.checkSelected(self.copy), - Description: self.c.Tr.LcCherryPickCopy, - }, - { - Key: opts.GetKey(opts.Config.Commits.CherryPickCopyRange), - Handler: self.checkSelected(self.copyRange), - Description: self.c.Tr.LcCherryPickCopyRange, - }, - { - Key: opts.GetKey(opts.Config.Commits.ResetCherryPick), - Handler: self.helpers.CherryPick.Reset, - Description: self.c.Tr.LcResetCherryPick, - }, - } - - return bindings -} - -func (self *SubCommitsController) checkSelected(callback func(*models.Commit) error) func() error { - return func() error { - commit := self.context().GetSelected() - if commit == nil { - return nil - } - - return callback(commit) - } -} - -func (self *SubCommitsController) Context() types.Context { - return self.context() -} - -func (self *SubCommitsController) context() *context.SubCommitsContext { - return self.contexts.SubCommits -} - -func (self *SubCommitsController) checkout(commit *models.Commit) error { - err := self.c.Ask(types.AskOpts{ - Title: self.c.Tr.LcCheckoutCommit, - Prompt: self.c.Tr.SureCheckoutThisCommit, - HandleConfirm: func() error { - self.c.LogAction(self.c.Tr.Actions.CheckoutCommit) - return self.helpers.Refs.CheckoutRef(commit.Sha, types.CheckoutRefOptions{}) - }, - }) - if err != nil { - return err - } - - self.context().SetSelectedLineIdx(0) - - return nil -} - -func (self *SubCommitsController) openResetMenu(commit *models.Commit) error { - return self.helpers.Refs.CreateGitResetMenu(commit.Sha) -} - -func (self *SubCommitsController) newBranch(commit *models.Commit) error { - return self.helpers.Refs.NewBranch(commit.RefName(), commit.Description(), "") -} - -func (self *SubCommitsController) copy(commit *models.Commit) error { - return self.helpers.CherryPick.Copy(commit, self.model.SubCommits, self.context()) -} - -func (self *SubCommitsController) copyRange(commit *models.Commit) error { - return self.helpers.CherryPick.CopyRange(self.context().GetSelectedLineIdx(), self.model.SubCommits, self.context()) -} diff --git a/pkg/i18n/chinese.go b/pkg/i18n/chinese.go index 3f83f6756..400a12da6 100644 --- a/pkg/i18n/chinese.go +++ b/pkg/i18n/chinese.go @@ -474,7 +474,6 @@ func chineseTranslationSet() TranslationSet { Actions: Actions{ // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) CheckoutCommit: "检出提交", - CheckoutReflogCommit: "检出 reflog 提交", CheckoutTag: "检出标签", CheckoutBranch: "检出分支", ForceCheckoutBranch: "强制检出分支", diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 04e948380..b09b6550c 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -488,7 +488,6 @@ type Bisect struct { type Actions struct { CheckoutCommit string - CheckoutReflogCommit string CheckoutTag string CheckoutBranch string ForceCheckoutBranch string @@ -1060,7 +1059,6 @@ func EnglishTranslationSet() TranslationSet { Actions: Actions{ // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) CheckoutCommit: "Checkout commit", - CheckoutReflogCommit: "Checkout reflog commit", CheckoutTag: "Checkout tag", CheckoutBranch: "Checkout branch", ForceCheckoutBranch: "Force checkout branch",