mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-02-09 13:47:11 +02:00
Retain commit message when cycling history
When cycling history, we want to make it so that upon returning to the original prompt, you get your text back. Importantly, we don't want to use the existing preservedMessage field for that because that's only for preserving a NEW commit message, and we don't want the history stuff of the commit reword flow to overwrite that.
This commit is contained in:
parent
9d68b287db
commit
a57310df24
@ -91,8 +91,10 @@ func (self *CommitMessageController) handleCommitIndexChange(value int) error {
|
||||
newIndex := currentIndex + value
|
||||
if newIndex == context.NoCommitIndex {
|
||||
self.context().SetSelectedIndex(newIndex)
|
||||
self.c.Helpers().Commits.SetMessageAndDescriptionInView("")
|
||||
self.c.Helpers().Commits.SetMessageAndDescriptionInView(self.context().GetHistoryMessage())
|
||||
return nil
|
||||
} else if currentIndex == context.NoCommitIndex {
|
||||
self.context().SetHistoryMessage(self.c.Helpers().Commits.JoinCommitMessageAndDescription())
|
||||
}
|
||||
|
||||
validCommit, err := self.setCommitMessageAtIndex(newIndex)
|
||||
|
@ -55,7 +55,7 @@ func (self *CommitsHelper) SetMessageAndDescriptionInView(message string) {
|
||||
self.c.Contexts().CommitMessage.RenderCommitLength()
|
||||
}
|
||||
|
||||
func (self *CommitsHelper) joinCommitMessageAndDescription() string {
|
||||
func (self *CommitsHelper) JoinCommitMessageAndDescription() string {
|
||||
if len(self.getCommitDescription()) == 0 {
|
||||
return self.getCommitSummary()
|
||||
}
|
||||
@ -106,7 +106,7 @@ func (self *CommitsHelper) OnCommitSuccess() {
|
||||
}
|
||||
|
||||
func (self *CommitsHelper) HandleCommitConfirm() error {
|
||||
fullMessage := self.joinCommitMessageAndDescription()
|
||||
fullMessage := self.JoinCommitMessageAndDescription()
|
||||
|
||||
if fullMessage == "" {
|
||||
return self.c.ErrorMsg(self.c.Tr.CommitWithoutMessageErr)
|
||||
@ -122,16 +122,19 @@ func (self *CommitsHelper) HandleCommitConfirm() error {
|
||||
|
||||
func (self *CommitsHelper) CloseCommitMessagePanel() error {
|
||||
if self.c.Contexts().CommitMessage.GetPreserveMessage() {
|
||||
message := self.joinCommitMessageAndDescription()
|
||||
message := self.JoinCommitMessageAndDescription()
|
||||
|
||||
self.c.Contexts().CommitMessage.SetPreservedMessage(message)
|
||||
} else {
|
||||
self.SetMessageAndDescriptionInView("")
|
||||
}
|
||||
return self.EscapeCommitsPanel()
|
||||
|
||||
self.c.Contexts().CommitMessage.SetHistoryMessage("")
|
||||
|
||||
return self.PopCommitMessageContexts()
|
||||
}
|
||||
|
||||
func (self *CommitsHelper) EscapeCommitsPanel() error {
|
||||
func (self *CommitsHelper) PopCommitMessageContexts() error {
|
||||
return self.c.RemoveContexts(self.commitMessageContexts())
|
||||
}
|
||||
|
||||
|
@ -111,7 +111,7 @@ func (self *WorkingTreeHelper) HandleCommitPressWithMessage(initialMessage strin
|
||||
func (self *WorkingTreeHelper) handleCommit(message string) error {
|
||||
cmdObj := self.c.Git().Commit.CommitCmdObj(message)
|
||||
self.c.LogAction(self.c.Tr.Actions.Commit)
|
||||
_ = self.commitsHelper.EscapeCommitsPanel()
|
||||
_ = self.commitsHelper.PopCommitMessageContexts()
|
||||
return self.gpgHelper.WithGpgHandling(cmdObj, self.c.Tr.CommittingStatus, func() error {
|
||||
self.commitsHelper.OnCommitSuccess()
|
||||
return nil
|
||||
|
@ -279,7 +279,7 @@ func (self *LocalCommitsController) handleReword(message string) error {
|
||||
return self.c.Error(err)
|
||||
}
|
||||
self.c.Helpers().Commits.OnCommitSuccess()
|
||||
_ = self.c.Helpers().Commits.EscapeCommitsPanel()
|
||||
_ = self.c.Helpers().Commits.PopCommitMessageContexts()
|
||||
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
|
||||
}
|
||||
|
||||
|
53
pkg/integration/tests/commit/history.go
Normal file
53
pkg/integration/tests/commit/history.go
Normal file
@ -0,0 +1,53 @@
|
||||
package commit
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var History = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "Cycling through commit message history in the commit message panel",
|
||||
ExtraCmdArgs: "",
|
||||
Skip: false,
|
||||
SetupConfig: func(config *config.AppConfig) {},
|
||||
SetupRepo: func(shell *Shell) {
|
||||
shell.EmptyCommit("initial commit")
|
||||
shell.EmptyCommit("commit 2")
|
||||
shell.EmptyCommit("commit 3")
|
||||
|
||||
shell.CreateFile("myfile", "myfile content")
|
||||
},
|
||||
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
PressPrimaryAction(). // stage file
|
||||
Press(keys.Files.CommitChanges)
|
||||
|
||||
t.ExpectPopup().CommitMessagePanel().
|
||||
InitialText(Equals("")).
|
||||
Type("my commit message").
|
||||
SelectPreviousMessage().
|
||||
Content(Equals("commit 3")).
|
||||
SelectPreviousMessage().
|
||||
Content(Equals("commit 2")).
|
||||
SelectPreviousMessage().
|
||||
Content(Equals("initial commit")).
|
||||
SelectPreviousMessage().
|
||||
Content(Equals("initial commit")). // we hit the end
|
||||
SelectNextMessage().
|
||||
Content(Equals("commit 2")).
|
||||
SelectNextMessage().
|
||||
Content(Equals("commit 3")).
|
||||
SelectNextMessage().
|
||||
Content(Equals("my commit message")).
|
||||
SelectNextMessage().
|
||||
Content(Equals("my commit message")). // we hit the beginning
|
||||
Type(" with extra added").
|
||||
Confirm()
|
||||
|
||||
t.Views().Commits().
|
||||
TopLines(
|
||||
Contains("my commit message with extra added").IsSelected(),
|
||||
)
|
||||
},
|
||||
})
|
59
pkg/integration/tests/commit/history_complex.go
Normal file
59
pkg/integration/tests/commit/history_complex.go
Normal file
@ -0,0 +1,59 @@
|
||||
package commit
|
||||
|
||||
import (
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||
)
|
||||
|
||||
var HistoryComplex = NewIntegrationTest(NewIntegrationTestArgs{
|
||||
Description: "More complex flow for cycling commit message history",
|
||||
ExtraCmdArgs: "",
|
||||
Skip: false,
|
||||
SetupConfig: func(config *config.AppConfig) {},
|
||||
SetupRepo: func(shell *Shell) {
|
||||
shell.EmptyCommit("initial commit")
|
||||
shell.EmptyCommit("commit 2")
|
||||
shell.EmptyCommit("commit 3")
|
||||
|
||||
shell.CreateFileAndAdd("myfile", "myfile content")
|
||||
},
|
||||
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||
// We're going to start a new commit message,
|
||||
// then leave and try to reword a commit, then
|
||||
// come back to original message and confirm we haven't lost our message.
|
||||
// This shows that we're storing the preserved message for a new commit separately
|
||||
// to the message when cycling history.
|
||||
|
||||
t.Views().Files().
|
||||
IsFocused().
|
||||
Press(keys.Files.CommitChanges)
|
||||
|
||||
t.ExpectPopup().CommitMessagePanel().
|
||||
InitialText(Equals("")).
|
||||
Type("my commit message").
|
||||
Cancel()
|
||||
|
||||
t.Views().Commits().
|
||||
Focus().
|
||||
SelectedLine(Contains("commit 3")).
|
||||
Press(keys.Commits.RenameCommit)
|
||||
|
||||
t.ExpectPopup().CommitMessagePanel().
|
||||
InitialText(Equals("commit 3")).
|
||||
SelectNextMessage().
|
||||
Content(Equals("")).
|
||||
Type("reworded message").
|
||||
SelectPreviousMessage().
|
||||
Content(Equals("commit 3")).
|
||||
SelectNextMessage().
|
||||
Content(Equals("reworded message")).
|
||||
Cancel()
|
||||
|
||||
t.Views().Files().
|
||||
Focus().
|
||||
Press(keys.Files.CommitChanges)
|
||||
|
||||
t.ExpectPopup().CommitMessagePanel().
|
||||
InitialText(Equals("my commit message"))
|
||||
},
|
||||
})
|
@ -49,6 +49,8 @@ var tests = []*components.IntegrationTest{
|
||||
commit.CommitMultiline,
|
||||
commit.CreateTag,
|
||||
commit.DiscardOldFileChange,
|
||||
commit.History,
|
||||
commit.HistoryComplex,
|
||||
commit.NewBranch,
|
||||
commit.ResetAuthor,
|
||||
commit.Revert,
|
||||
|
Loading…
x
Reference in New Issue
Block a user