mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-05-11 20:36:03 +02:00
Implement reboot-resistant commit message persistence
This commit is contained in:
parent
fcf30caf40
commit
a32be7e9fa
3 changed files with 48 additions and 10 deletions
|
@ -1,6 +1,8 @@
|
|||
package context
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
|
@ -8,8 +10,11 @@ import (
|
|||
"github.com/jesseduffield/lazygit/pkg/gui/keybindings"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
"github.com/spf13/afero"
|
||||
)
|
||||
|
||||
const PreservedCommitMessageFileName = "LAZYGIT_PENDING_COMMIT"
|
||||
|
||||
type CommitMessageContext struct {
|
||||
c *ContextCommon
|
||||
types.Context
|
||||
|
@ -33,8 +38,6 @@ type CommitMessageViewModel struct {
|
|||
// we remember the initial message so that we can tell whether we should preserve
|
||||
// the message; if it's still identical to the initial message, we don't
|
||||
initialMessage string
|
||||
// the full preserved message (combined summary and description)
|
||||
preservedMessage string
|
||||
// invoked when pressing enter in the commit message panel
|
||||
onConfirm func(string, string) error
|
||||
// invoked when pressing the switch-to-editor key binding
|
||||
|
@ -75,16 +78,51 @@ func (self *CommitMessageContext) GetSelectedIndex() int {
|
|||
return self.viewModel.selectedindex
|
||||
}
|
||||
|
||||
func (self *CommitMessageContext) GetPreservedMessagePath() string {
|
||||
return filepath.Join(self.c.Git().RepoPaths.WorktreeGitDirPath(), PreservedCommitMessageFileName)
|
||||
}
|
||||
|
||||
func (self *CommitMessageContext) GetPreserveMessage() bool {
|
||||
return self.viewModel.preserveMessage
|
||||
}
|
||||
|
||||
func (self *CommitMessageContext) GetPreservedMessage() string {
|
||||
return self.viewModel.preservedMessage
|
||||
func (self *CommitMessageContext) getPreservedMessage() (string, error) {
|
||||
buf, err := afero.ReadFile(self.c.Fs, self.GetPreservedMessagePath())
|
||||
if os.IsNotExist(err) {
|
||||
return "", nil
|
||||
}
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(buf), nil
|
||||
}
|
||||
|
||||
func (self *CommitMessageContext) SetPreservedMessage(message string) {
|
||||
self.viewModel.preservedMessage = message
|
||||
func (self *CommitMessageContext) GetPreservedMessageAndLogError() string {
|
||||
msg, err := self.getPreservedMessage()
|
||||
if err != nil {
|
||||
self.c.Log.Errorf("error when retrieving persisted commit message: %v", err)
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
func (self *CommitMessageContext) setPreservedMessage(message string) error {
|
||||
preservedFilePath := self.GetPreservedMessagePath()
|
||||
|
||||
if len(message) == 0 {
|
||||
err := self.c.Fs.Remove(preservedFilePath)
|
||||
if os.IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
return afero.WriteFile(self.c.Fs, preservedFilePath, []byte(message), 0o644)
|
||||
}
|
||||
|
||||
func (self *CommitMessageContext) SetPreservedMessageAndLogError(message string) {
|
||||
if err := self.setPreservedMessage(message); err != nil {
|
||||
self.c.Log.Errorf("error when persisting commit message: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *CommitMessageContext) GetInitialMessage() string {
|
||||
|
|
|
@ -113,7 +113,7 @@ func (self *CommitsHelper) UpdateCommitPanelView(message string) {
|
|||
}
|
||||
|
||||
if self.c.Contexts().CommitMessage.GetPreserveMessage() {
|
||||
preservedMessage := self.c.Contexts().CommitMessage.GetPreservedMessage()
|
||||
preservedMessage := self.c.Contexts().CommitMessage.GetPreservedMessageAndLogError()
|
||||
self.SetMessageAndDescriptionInView(preservedMessage)
|
||||
return
|
||||
}
|
||||
|
@ -156,7 +156,7 @@ func (self *CommitsHelper) OpenCommitMessagePanel(opts *OpenCommitMessagePanelOp
|
|||
func (self *CommitsHelper) OnCommitSuccess() {
|
||||
// if we have a preserved message we want to clear it on success
|
||||
if self.c.Contexts().CommitMessage.GetPreserveMessage() {
|
||||
self.c.Contexts().CommitMessage.SetPreservedMessage("")
|
||||
self.c.Contexts().CommitMessage.SetPreservedMessageAndLogError("")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -179,7 +179,7 @@ func (self *CommitsHelper) CloseCommitMessagePanel() {
|
|||
if self.c.Contexts().CommitMessage.GetPreserveMessage() {
|
||||
message := self.JoinCommitMessageAndUnwrappedDescription()
|
||||
if message != self.c.Contexts().CommitMessage.GetInitialMessage() {
|
||||
self.c.Contexts().CommitMessage.SetPreservedMessage(message)
|
||||
self.c.Contexts().CommitMessage.SetPreservedMessageAndLogError(message)
|
||||
}
|
||||
} else {
|
||||
self.SetMessageAndDescriptionInView("")
|
||||
|
|
|
@ -149,7 +149,7 @@ func (self *WorkingTreeHelper) HandleWIPCommitPress() error {
|
|||
}
|
||||
|
||||
func (self *WorkingTreeHelper) HandleCommitPress() error {
|
||||
message := self.c.Contexts().CommitMessage.GetPreservedMessage()
|
||||
message := self.c.Contexts().CommitMessage.GetPreservedMessageAndLogError()
|
||||
|
||||
if message == "" {
|
||||
commitPrefixConfig := self.commitPrefixConfigForRepo()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue