diff --git a/pkg/commands/git_commands/config.go b/pkg/commands/git_commands/config.go index a9fd4e14772..bab9710b8d7 100644 --- a/pkg/commands/git_commands/config.go +++ b/pkg/commands/git_commands/config.go @@ -104,3 +104,7 @@ func (self *ConfigCommands) GetMergeFF() string { func (self *ConfigCommands) DropConfigCache() { self.gitConfig.DropCache() } + +func (self *ConfigCommands) GetCommitTemplatePath() string { + return self.gitConfig.Get("commit.template") +} diff --git a/pkg/gui/context/commit_message_context.go b/pkg/gui/context/commit_message_context.go index d533e1dea40..60f9b1c349c 100644 --- a/pkg/gui/context/commit_message_context.go +++ b/pkg/gui/context/commit_message_context.go @@ -85,6 +85,14 @@ func (self *CommitMessageContext) GetPreservedMessagePath() string { return filepath.Join(self.c.Git().RepoPaths.WorktreeGitDirPath(), PreservedCommitMessageFileName) } +func (self *CommitMessageContext) GetCommitTemplatePath() (string, error) { + filename := self.c.Git().Config.GetCommitTemplatePath() + if filename == "" { + return "", nil + } + return filepath.Abs(filename) +} + func (self *CommitMessageContext) GetPreserveMessage() bool { return self.viewModel.preserveMessage } @@ -100,6 +108,23 @@ func (self *CommitMessageContext) getPreservedMessage() (string, error) { return string(buf), nil } +func (self *CommitMessageContext) getCommitTemplate() (string, error) { + path, err := self.GetCommitTemplatePath() + if err != nil || path == "" { + return "", nil + } + buf, err := afero.ReadFile(self.c.Fs, path) + + if os.IsNotExist(err) { + self.c.Log.Errorf("Commit template %s file was not found. Please check Git config", path) + return "", nil + } + if err != nil { + return "", err + } + return string(buf), nil +} + func (self *CommitMessageContext) GetPreservedMessageAndLogError() string { msg, err := self.getPreservedMessage() if err != nil { @@ -108,6 +133,14 @@ func (self *CommitMessageContext) GetPreservedMessageAndLogError() string { return msg } +func (self *CommitMessageContext) GetCommitTemplateAndLogError() string { + template, err := self.getCommitTemplate() + if err != nil { + self.c.Log.Errorf("error when retrieving commit message template: %v", err) + } + return template +} + func (self *CommitMessageContext) setPreservedMessage(message string) error { preservedFilePath := self.GetPreservedMessagePath() diff --git a/pkg/gui/controllers/helpers/commits_helper.go b/pkg/gui/controllers/helpers/commits_helper.go index 306c689a1e4..13125e1b8ab 100644 --- a/pkg/gui/controllers/helpers/commits_helper.go +++ b/pkg/gui/controllers/helpers/commits_helper.go @@ -108,7 +108,15 @@ func (self *CommitsHelper) UpdateCommitPanelView(message string) { if self.c.Contexts().CommitMessage.GetPreserveMessage() { preservedMessage := self.c.Contexts().CommitMessage.GetPreservedMessageAndLogError() - self.SetMessageAndDescriptionInView(preservedMessage) + if preservedMessage != "" { + self.SetMessageAndDescriptionInView(preservedMessage) + return + } + } + + commitTemplate := self.c.Contexts().CommitMessage.GetCommitTemplateAndLogError() + if commitTemplate != "" { + self.SetMessageAndDescriptionInView(commitTemplate) return }