1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-06-15 00:15:32 +02:00

add basic commits controller for handling actions that apply to all commit contexts

This commit is contained in:
Jesse Duffield
2022-03-26 16:42:56 +11:00
parent 540edb0bf4
commit 45dab51214
14 changed files with 311 additions and 424 deletions

View File

@ -90,8 +90,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<pre> <pre>
<kbd>ctrl+o</kbd>: copy commit SHA to clipboard <kbd>ctrl+o</kbd>: copy commit SHA to clipboard
<kbd>space</kbd>: checkout commit <kbd>space</kbd>: checkout commit
<kbd>g</kbd>: view reset options <kbd>y</kbd>: copy commit attribute
<kbd>n</kbd>: new branch <kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: create new branch off of commit
<kbd>g</kbd>: reset to this commit
<kbd>c</kbd>: copy commit (cherry-pick) <kbd>c</kbd>: copy commit (cherry-pick)
<kbd>C</kbd>: copy commit range (cherry-pick) <kbd>C</kbd>: copy commit range (cherry-pick)
<kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection <kbd>ctrl+r</kbd>: 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
<kbd>ctrl+k</kbd>: move commit up one <kbd>ctrl+k</kbd>: move commit up one
<kbd>A</kbd>: amend commit with staged changes <kbd>A</kbd>: amend commit with staged changes
<kbd>t</kbd>: revert commit <kbd>t</kbd>: revert commit
<kbd>n</kbd>: create new branch off of commit
<kbd>c</kbd>: copy commit (cherry-pick)
<kbd>C</kbd>: copy commit range (cherry-pick)
<kbd>v</kbd>: paste commits (cherry-pick) <kbd>v</kbd>: paste commits (cherry-pick)
<kbd>ctrl+l</kbd>: open log menu <kbd>ctrl+l</kbd>: open log menu
<kbd>g</kbd>: reset to this commit
<kbd>space</kbd>: checkout commit
<kbd>T</kbd>: tag commit <kbd>T</kbd>: tag commit
<kbd>space</kbd>: checkout commit
<kbd>y</kbd>: copy commit attribute <kbd>y</kbd>: copy commit attribute
<kbd>o</kbd>: open commit in browser <kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: create new branch off of commit
<kbd>g</kbd>: reset to this commit
<kbd>c</kbd>: copy commit (cherry-pick)
<kbd>C</kbd>: copy commit range (cherry-pick)
<kbd>enter</kbd>: view selected item's files <kbd>enter</kbd>: view selected item's files
</pre> </pre>
@ -165,7 +167,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<pre> <pre>
<kbd>ctrl+o</kbd>: copy commit SHA to clipboard <kbd>ctrl+o</kbd>: copy commit SHA to clipboard
<kbd>space</kbd>: checkout commit <kbd>space</kbd>: checkout commit
<kbd>g</kbd>: view reset options <kbd>y</kbd>: copy commit attribute
<kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: create new branch off of commit
<kbd>g</kbd>: reset to this commit
<kbd>c</kbd>: copy commit (cherry-pick) <kbd>c</kbd>: copy commit (cherry-pick)
<kbd>C</kbd>: copy commit range (cherry-pick) <kbd>C</kbd>: copy commit range (cherry-pick)
<kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection <kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection

View File

@ -130,8 +130,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<pre> <pre>
<kbd>ctrl+o</kbd>: kopieer commit SHA naar klembord <kbd>ctrl+o</kbd>: kopieer commit SHA naar klembord
<kbd>space</kbd>: checkout commit <kbd>space</kbd>: checkout commit
<kbd>g</kbd>: bekijk reset opties <kbd>y</kbd>: copy commit attribute
<kbd>n</kbd>: nieuwe branch <kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: creëer nieuwe branch van commit
<kbd>g</kbd>: reset naar deze commit
<kbd>c</kbd>: kopieer commit (cherry-pick) <kbd>c</kbd>: kopieer commit (cherry-pick)
<kbd>C</kbd>: kopieer commit reeks (cherry-pick) <kbd>C</kbd>: kopieer commit reeks (cherry-pick)
<kbd>ctrl+r</kbd>: reset cherry-picked (gekopieerde) commits selectie <kbd>ctrl+r</kbd>: 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
<kbd>ctrl+k</kbd>: verplaats commit 1 naar boven <kbd>ctrl+k</kbd>: verplaats commit 1 naar boven
<kbd>A</kbd>: wijzig commit met staged veranderingen <kbd>A</kbd>: wijzig commit met staged veranderingen
<kbd>t</kbd>: commit ongedaan maken <kbd>t</kbd>: commit ongedaan maken
<kbd>n</kbd>: creëer nieuwe branch van commit
<kbd>c</kbd>: kopieer commit (cherry-pick)
<kbd>C</kbd>: kopieer commit reeks (cherry-pick)
<kbd>v</kbd>: plak commits (cherry-pick) <kbd>v</kbd>: plak commits (cherry-pick)
<kbd>ctrl+l</kbd>: open log menu <kbd>ctrl+l</kbd>: open log menu
<kbd>g</kbd>: reset naar deze commit
<kbd>space</kbd>: checkout commit
<kbd>T</kbd>: tag commit <kbd>T</kbd>: tag commit
<kbd>space</kbd>: checkout commit
<kbd>y</kbd>: copy commit attribute <kbd>y</kbd>: copy commit attribute
<kbd>o</kbd>: open commit in browser <kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: creëer nieuwe branch van commit
<kbd>g</kbd>: reset naar deze commit
<kbd>c</kbd>: kopieer commit (cherry-pick)
<kbd>C</kbd>: kopieer commit reeks (cherry-pick)
<kbd>enter</kbd>: bekijk gecommite bestanden <kbd>enter</kbd>: bekijk gecommite bestanden
</pre> </pre>
@ -205,7 +207,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<pre> <pre>
<kbd>ctrl+o</kbd>: kopieer commit SHA naar klembord <kbd>ctrl+o</kbd>: kopieer commit SHA naar klembord
<kbd>space</kbd>: checkout commit <kbd>space</kbd>: checkout commit
<kbd>g</kbd>: bekijk reset opties <kbd>y</kbd>: copy commit attribute
<kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: creëer nieuwe branch van commit
<kbd>g</kbd>: reset naar deze commit
<kbd>c</kbd>: kopieer commit (cherry-pick) <kbd>c</kbd>: kopieer commit (cherry-pick)
<kbd>C</kbd>: kopieer commit reeks (cherry-pick) <kbd>C</kbd>: kopieer commit reeks (cherry-pick)
<kbd>ctrl+r</kbd>: reset cherry-picked (gekopieerde) commits selectie <kbd>ctrl+r</kbd>: reset cherry-picked (gekopieerde) commits selectie

View File

@ -60,16 +60,16 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>ctrl+k</kbd>: przenieś commit 1 w górę <kbd>ctrl+k</kbd>: przenieś commit 1 w górę
<kbd>A</kbd>: popraw commit zmianami z poczekalni <kbd>A</kbd>: popraw commit zmianami z poczekalni
<kbd>t</kbd>: odwróć commit <kbd>t</kbd>: odwróć commit
<kbd>n</kbd>: create new branch off of commit
<kbd>c</kbd>: kopiuj commit (przebieranie)
<kbd>C</kbd>: kopiuj zakres commitów (przebieranie)
<kbd>v</kbd>: wklej commity (przebieranie) <kbd>v</kbd>: wklej commity (przebieranie)
<kbd>ctrl+l</kbd>: open log menu <kbd>ctrl+l</kbd>: open log menu
<kbd>g</kbd>: zresetuj do tego commita
<kbd>space</kbd>: checkout commit
<kbd>T</kbd>: tag commit <kbd>T</kbd>: tag commit
<kbd>space</kbd>: checkout commit
<kbd>y</kbd>: copy commit attribute <kbd>y</kbd>: copy commit attribute
<kbd>o</kbd>: open commit in browser <kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: create new branch off of commit
<kbd>g</kbd>: zresetuj do tego commita
<kbd>c</kbd>: kopiuj commit (przebieranie)
<kbd>C</kbd>: kopiuj zakres commitów (przebieranie)
<kbd>enter</kbd>: przeglądaj pliki commita <kbd>enter</kbd>: przeglądaj pliki commita
</pre> </pre>
@ -78,7 +78,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<pre> <pre>
<kbd>ctrl+o</kbd>: copy commit SHA to clipboard <kbd>ctrl+o</kbd>: copy commit SHA to clipboard
<kbd>space</kbd>: checkout commit <kbd>space</kbd>: checkout commit
<kbd>g</kbd>: wyświetl opcje resetu <kbd>y</kbd>: copy commit attribute
<kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: create new branch off of commit
<kbd>g</kbd>: zresetuj do tego commita
<kbd>c</kbd>: kopiuj commit (przebieranie) <kbd>c</kbd>: kopiuj commit (przebieranie)
<kbd>C</kbd>: kopiuj zakres commitów (przebieranie) <kbd>C</kbd>: kopiuj zakres commitów (przebieranie)
<kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection <kbd>ctrl+r</kbd>: 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
<pre> <pre>
<kbd>ctrl+o</kbd>: copy commit SHA to clipboard <kbd>ctrl+o</kbd>: copy commit SHA to clipboard
<kbd>space</kbd>: checkout commit <kbd>space</kbd>: checkout commit
<kbd>g</kbd>: wyświetl opcje resetu <kbd>y</kbd>: copy commit attribute
<kbd>n</kbd>: nowa gałąź <kbd>o</kbd>: open commit in browser
<kbd>n</kbd>: create new branch off of commit
<kbd>g</kbd>: zresetuj do tego commita
<kbd>c</kbd>: kopiuj commit (przebieranie) <kbd>c</kbd>: kopiuj commit (przebieranie)
<kbd>C</kbd>: kopiuj zakres commitów (przebieranie) <kbd>C</kbd>: kopiuj zakres commitów (przebieranie)
<kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection <kbd>ctrl+r</kbd>: reset cherry-picked (copied) commits selection

View File

@ -126,8 +126,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<pre> <pre>
<kbd>ctrl+o</kbd>: 将提交的 SHA 复制到剪贴板 <kbd>ctrl+o</kbd>: 将提交的 SHA 复制到剪贴板
<kbd>space</kbd>: 检出提交 <kbd>space</kbd>: 检出提交
<kbd>g</kbd>: 查看重置选项 <kbd>y</kbd>: copy commit attribute
<kbd>n</kbd>: 新分支 <kbd>o</kbd>: 在浏览器中打开提交
<kbd>n</kbd>: 从提交创建新分支
<kbd>g</kbd>: 重置为此提交
<kbd>c</kbd>: 复制提交(拣选) <kbd>c</kbd>: 复制提交(拣选)
<kbd>C</kbd>: 复制提交范围(拣选) <kbd>C</kbd>: 复制提交范围(拣选)
<kbd>ctrl+r</kbd>: 重置已拣选(复制)的提交 <kbd>ctrl+r</kbd>: 重置已拣选(复制)的提交
@ -173,7 +175,10 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<pre> <pre>
<kbd>ctrl+o</kbd>: 将提交的 SHA 复制到剪贴板 <kbd>ctrl+o</kbd>: 将提交的 SHA 复制到剪贴板
<kbd>space</kbd>: 检出提交 <kbd>space</kbd>: 检出提交
<kbd>g</kbd>: 查看重置选项 <kbd>y</kbd>: copy commit attribute
<kbd>o</kbd>: 在浏览器中打开提交
<kbd>n</kbd>: 从提交创建新分支
<kbd>g</kbd>: 重置为此提交
<kbd>c</kbd>: 复制提交(拣选) <kbd>c</kbd>: 复制提交(拣选)
<kbd>C</kbd>: 复制提交范围(拣选) <kbd>C</kbd>: 复制提交范围(拣选)
<kbd>ctrl+r</kbd>: 重置已拣选(复制)的提交 <kbd>ctrl+r</kbd>: 重置已拣选(复制)的提交
@ -199,16 +204,16 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
<kbd>ctrl+k</kbd>: 上移提交 <kbd>ctrl+k</kbd>: 上移提交
<kbd>A</kbd>: 用已暂存的更改来修补提交 <kbd>A</kbd>: 用已暂存的更改来修补提交
<kbd>t</kbd>: 还原提交 <kbd>t</kbd>: 还原提交
<kbd>n</kbd>: 从提交创建新分支
<kbd>c</kbd>: 复制提交(拣选)
<kbd>C</kbd>: 复制提交范围(拣选)
<kbd>v</kbd>: 粘贴提交(拣选) <kbd>v</kbd>: 粘贴提交(拣选)
<kbd>ctrl+l</kbd>: 打开日志菜单 <kbd>ctrl+l</kbd>: 打开日志菜单
<kbd>g</kbd>: 重置为此提交
<kbd>space</kbd>: 检出提交
<kbd>T</kbd>: 标签提交 <kbd>T</kbd>: 标签提交
<kbd>space</kbd>: 检出提交
<kbd>y</kbd>: copy commit attribute <kbd>y</kbd>: copy commit attribute
<kbd>o</kbd>: open commit in browser <kbd>o</kbd>: 在浏览器中打开提交
<kbd>n</kbd>: 从提交创建新分支
<kbd>g</kbd>: 重置为此提交
<kbd>c</kbd>: 复制提交(拣选)
<kbd>C</kbd>: 复制提交范围(拣选)
<kbd>enter</kbd>: 查看提交的文件 <kbd>enter</kbd>: 查看提交的文件
</pre> </pre>

View File

@ -108,3 +108,7 @@ func (self *LocalCommitsViewModel) SetShowWholeGitGraph(value bool) {
func (self *LocalCommitsViewModel) GetShowWholeGitGraph() bool { func (self *LocalCommitsViewModel) GetShowWholeGitGraph() bool {
return self.showWholeGitGraph return self.showWholeGitGraph
} }
func (self *LocalCommitsViewModel) GetCommits() []*models.Commit {
return self.getModel()
}

View File

@ -70,3 +70,7 @@ func (self *ReflogCommitsContext) GetSelectedRefName() string {
return item.RefName() return item.RefName()
} }
func (self *ReflogCommitsContext) GetCommits() []*models.Commit {
return self.getModel()
}

View File

@ -72,3 +72,7 @@ func (self *SubCommitsContext) GetSelectedRefName() string {
return item.RefName() return item.RefName()
} }
func (self *SubCommitsContext) GetCommits() []*models.Commit {
return self.getModel()
}

View File

@ -74,9 +74,6 @@ func (gui *Gui) resetControllers() {
bisectController := controllers.NewBisectController(common) bisectController := controllers.NewBisectController(common)
reflogController := controllers.NewReflogController(common)
subCommitsController := controllers.NewSubCommitsController(common)
getSavedCommitMessage := func() string { getSavedCommitMessage := func() string {
return gui.State.savedCommitMessage return gui.State.savedCommitMessage
} }
@ -159,13 +156,21 @@ func (gui *Gui) resetControllers() {
controllers.AttachControllers(context, commitishControllerFactory.Create(context)) 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.Branches, branchesController, gitFlowController)
controllers.AttachControllers(gui.State.Contexts.Files, gui.Controllers.Files, filesRemoveController) controllers.AttachControllers(gui.State.Contexts.Files, gui.Controllers.Files, filesRemoveController)
controllers.AttachControllers(gui.State.Contexts.Tags, gui.Controllers.Tags) controllers.AttachControllers(gui.State.Contexts.Tags, gui.Controllers.Tags)
controllers.AttachControllers(gui.State.Contexts.Submodules, gui.Controllers.Submodules) controllers.AttachControllers(gui.State.Contexts.Submodules, gui.Controllers.Submodules)
controllers.AttachControllers(gui.State.Contexts.LocalCommits, gui.Controllers.LocalCommits, bisectController) 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.CommitFiles, commitFilesController)
controllers.AttachControllers(gui.State.Contexts.Remotes, gui.Controllers.Remotes) controllers.AttachControllers(gui.State.Contexts.Remotes, gui.Controllers.Remotes)
controllers.AttachControllers(gui.State.Contexts.Stash, stashController) controllers.AttachControllers(gui.State.Contexts.Stash, stashController)

View File

@ -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)
}

View File

@ -3,7 +3,6 @@ package controllers
import ( import (
"fmt" "fmt"
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/gui/context" "github.com/jesseduffield/lazygit/pkg/gui/context"
"github.com/jesseduffield/lazygit/pkg/gui/types" "github.com/jesseduffield/lazygit/pkg/gui/types"
@ -101,22 +100,6 @@ func (self *LocalCommitsController) GetKeybindings(opts types.KeybindingsOpts) [
Handler: self.checkSelected(self.revert), Handler: self.checkSelected(self.revert),
Description: self.c.Tr.LcRevertCommit, 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), Key: opts.GetKey(opts.Config.Commits.PasteCommits),
Handler: opts.Guards.OutsideFilterMode(self.paste), Handler: opts.Guards.OutsideFilterMode(self.paste),
@ -149,32 +132,11 @@ func (self *LocalCommitsController) GetKeybindings(opts types.KeybindingsOpts) [
Description: self.c.Tr.LcOpenLogMenu, Description: self.c.Tr.LcOpenLogMenu,
OpensMenu: true, 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), Key: opts.GetKey(opts.Config.Commits.TagCommit),
Handler: self.checkSelected(self.createTag), Handler: self.checkSelected(self.createTag),
Description: self.c.Tr.LcTagCommit, 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 return bindings
@ -557,21 +519,6 @@ func (self *LocalCommitsController) createTag(commit *models.Commit) error {
return self.helpers.Tags.CreateTagMenu(commit.Sha, func() {}) 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 { func (self *LocalCommitsController) openSearch() error {
// we usually lazyload these commits but now that we're searching we need to load them now // we usually lazyload these commits but now that we're searching we need to load them now
if self.context().GetLimitCommits() { if self.context().GetLimitCommits() {
@ -600,93 +547,6 @@ func (self *LocalCommitsController) gotoBottom() error {
return nil 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 { func (self *LocalCommitsController) handleOpenLogMenu() error {
return self.c.Menu(types.CreateMenuOptions{ return self.c.Menu(types.CreateMenuOptions{
Title: self.c.Tr.LogMenuTitle, 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 { func (self *LocalCommitsController) checkSelected(callback func(*models.Commit) error) func() error {
return func() error { return func() error {
commit := self.context().GetSelected() commit := self.context().GetSelected()
@ -803,18 +649,6 @@ func (self *LocalCommitsController) context() *context.LocalCommitsContext {
return self.contexts.LocalCommits 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 { func (self *LocalCommitsController) paste() error {
return self.helpers.CherryPick.Paste() return self.helpers.CherryPick.Paste()
} }

View File

@ -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())
}

View File

@ -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())
}

View File

@ -474,7 +474,6 @@ func chineseTranslationSet() TranslationSet {
Actions: Actions{ Actions: Actions{
// TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm)
CheckoutCommit: "检出提交", CheckoutCommit: "检出提交",
CheckoutReflogCommit: "检出 reflog 提交",
CheckoutTag: "检出标签", CheckoutTag: "检出标签",
CheckoutBranch: "检出分支", CheckoutBranch: "检出分支",
ForceCheckoutBranch: "强制检出分支", ForceCheckoutBranch: "强制检出分支",

View File

@ -488,7 +488,6 @@ type Bisect struct {
type Actions struct { type Actions struct {
CheckoutCommit string CheckoutCommit string
CheckoutReflogCommit string
CheckoutTag string CheckoutTag string
CheckoutBranch string CheckoutBranch string
ForceCheckoutBranch string ForceCheckoutBranch string
@ -1060,7 +1059,6 @@ func EnglishTranslationSet() TranslationSet {
Actions: Actions{ Actions: Actions{
// TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm)
CheckoutCommit: "Checkout commit", CheckoutCommit: "Checkout commit",
CheckoutReflogCommit: "Checkout reflog commit",
CheckoutTag: "Checkout tag", CheckoutTag: "Checkout tag",
CheckoutBranch: "Checkout branch", CheckoutBranch: "Checkout branch",
ForceCheckoutBranch: "Force checkout branch", ForceCheckoutBranch: "Force checkout branch",