summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2023-04-29 20:04:43 +1000
committerJesse Duffield <jessedduffield@gmail.com>2023-04-30 13:19:54 +1000
commita57310df240405770d37f46362b28fe464ef9531 (patch)
tree20f2e695a8b2c14026b7381a3a51406208145068
parent9d68b287db57b49eddf4b2b81ca1acd2e16aa5aa (diff)
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.
-rw-r--r--pkg/gui/controllers/commit_message_controller.go4
-rw-r--r--pkg/gui/controllers/helpers/commits_helper.go13
-rw-r--r--pkg/gui/controllers/helpers/working_tree_helper.go2
-rw-r--r--pkg/gui/controllers/local_commits_controller.go2
-rw-r--r--pkg/integration/tests/commit/history.go53
-rw-r--r--pkg/integration/tests/commit/history_complex.go59
-rw-r--r--pkg/integration/tests/test_list.go2
7 files changed, 127 insertions, 8 deletions
diff --git a/pkg/gui/controllers/commit_message_controller.go b/pkg/gui/controllers/commit_message_controller.go
index b0318e8a4..929e647f3 100644
--- a/pkg/gui/controllers/commit_message_controller.go
+++ b/pkg/gui/controllers/commit_message_controller.go
@@ -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)
diff --git a/pkg/gui/controllers/helpers/commits_helper.go b/pkg/gui/controllers/helpers/commits_helper.go
index ce1b3a9e2..262f970de 100644
--- a/pkg/gui/controllers/helpers/commits_helper.go
+++ b/pkg/gui/controllers/helpers/commits_helper.go
@@ -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())
}
diff --git a/pkg/gui/controllers/helpers/working_tree_helper.go b/pkg/gui/controllers/helpers/working_tree_helper.go
index e78c8edf5..2679310f9 100644
--- a/pkg/gui/controllers/helpers/working_tree_helper.go
+++ b/pkg/gui/controllers/helpers/working_tree_helper.go
@@ -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
diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go
index 7e7a22365..7ac6e8671 100644
--- a/pkg/gui/controllers/local_commits_controller.go
+++ b/pkg/gui/controllers/local_commits_controller.go
@@ -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})
}
diff --git a/pkg/integration/tests/commit/history.go b/pkg/integration/tests/commit/history.go
new file mode 100644
index 000000000..9938ae35a
--- /dev/null
+++ b/pkg/integration/tests/commit/history.go
@@ -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(),
+ )
+ },
+})
diff --git a/pkg/integration/tests/commit/history_complex.go b/pkg/integration/tests/commit/history_complex.go
new file mode 100644
index 000000000..e88da4416
--- /dev/null
+++ b/pkg/integration/tests/commit/history_complex.go
@@ -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"))
+ },
+})
diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go
index 10838c008..8c1d75c6e 100644
--- a/pkg/integration/tests/test_list.go
+++ b/pkg/integration/tests/test_list.go
@@ -49,6 +49,8 @@ var tests = []*components.IntegrationTest{
commit.CommitMultiline,
commit.CreateTag,
commit.DiscardOldFileChange,
+ commit.History,
+ commit.HistoryComplex,
commit.NewBranch,
commit.ResetAuthor,
commit.Revert,