Add commitPrefix for defining a prefix for any project

This commit is contained in:
Jonathan Duck 2024-01-31 20:11:01 -08:00 committed by Stefan Haller
parent af0897f18f
commit 01ff18dd92
7 changed files with 86 additions and 4 deletions

View file

@ -549,6 +549,15 @@ Example:
- Branch name: feature/AB-123 - Branch name: feature/AB-123
- Commit message: [AB-123] Adding feature - Commit message: [AB-123] Adding feature
```yaml
git:
commitPrefix:
pattern: "^\\w+\\/(\\w+-\\w+).*"
replace: '[$1] '
```
If you want repository-specific prefixes, you can map them with `commitPrefixes`. If you have both `commitPrefixes` defined and an entry in `commitPrefixes` for the current repo, the `commitPrefixes` entry is given higher precedence. Repository folder names must be an exact match.
```yaml ```yaml
git: git:
commitPrefixes: commitPrefixes:

View file

@ -222,6 +222,8 @@ type GitConfig struct {
// If true, do not allow force pushes // If true, do not allow force pushes
DisableForcePushing bool `yaml:"disableForcePushing"` DisableForcePushing bool `yaml:"disableForcePushing"`
// See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix // See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix
CommitPrefix *CommitPrefixConfig `yaml:"commitPrefix"`
// See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix
CommitPrefixes map[string]CommitPrefixConfig `yaml:"commitPrefixes"` CommitPrefixes map[string]CommitPrefixConfig `yaml:"commitPrefixes"`
// If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀 // If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀
// (This should really be under 'gui', not 'git') // (This should really be under 'gui', not 'git')

View file

@ -220,9 +220,9 @@ func (self *WorkingTreeHelper) prepareFilesForCommit() error {
func (self *WorkingTreeHelper) commitPrefixConfigForRepo() *config.CommitPrefixConfig { func (self *WorkingTreeHelper) commitPrefixConfigForRepo() *config.CommitPrefixConfig {
cfg, ok := self.c.UserConfig.Git.CommitPrefixes[self.c.Git().RepoPaths.RepoName()] cfg, ok := self.c.UserConfig.Git.CommitPrefixes[self.c.Git().RepoPaths.RepoName()]
if !ok { if ok {
return nil
}
return &cfg return &cfg
} }
return self.c.UserConfig.Git.CommitPrefix
}

View file

@ -0,0 +1,47 @@
package commit
import (
"github.com/jesseduffield/lazygit/pkg/config"
. "github.com/jesseduffield/lazygit/pkg/integration/components"
)
var CommitWithGlobalPrefix = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Commit with defined config commitPrefix",
ExtraCmdArgs: []string{},
Skip: false,
SetupConfig: func(testConfig *config.AppConfig) {
testConfig.UserConfig.Git.CommitPrefix = &config.CommitPrefixConfig{Pattern: "^\\w+\\/(\\w+-\\w+).*", Replace: "[$1]: "}
},
SetupRepo: func(shell *Shell) {
shell.NewBranch("feature/TEST-001")
shell.CreateFile("test-commit-prefix", "This is foo bar")
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Commits().
IsEmpty()
t.Views().Files().
IsFocused().
PressPrimaryAction().
Press(keys.Files.CommitChanges)
t.ExpectPopup().CommitMessagePanel().
Title(Equals("Commit summary")).
InitialText(Equals("[TEST-001]: ")).
Type("my commit message").
Cancel()
t.Views().Files().
IsFocused().
Press(keys.Files.CommitChanges)
t.ExpectPopup().CommitMessagePanel().
Title(Equals("Commit summary")).
InitialText(Equals("[TEST-001]: my commit message")).
Type(". Added something else").
Confirm()
t.Views().Commits().Focus()
t.Views().Main().Content(Contains("[TEST-001]: my commit message. Added something else"))
},
})

View file

@ -6,7 +6,7 @@ import (
) )
var CommitWithPrefix = NewIntegrationTest(NewIntegrationTestArgs{ var CommitWithPrefix = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Commit with defined config commitPrefix", Description: "Commit with defined config commitPrefixes",
ExtraCmdArgs: []string{}, ExtraCmdArgs: []string{},
Skip: false, Skip: false,
SetupConfig: func(testConfig *config.AppConfig) { SetupConfig: func(testConfig *config.AppConfig) {

View file

@ -72,6 +72,7 @@ var tests = []*components.IntegrationTest{
commit.CommitMultiline, commit.CommitMultiline,
commit.CommitSwitchToEditor, commit.CommitSwitchToEditor,
commit.CommitWipWithPrefix, commit.CommitWipWithPrefix,
commit.CommitWithGlobalPrefix,
commit.CommitWithPrefix, commit.CommitWithPrefix,
commit.CreateAmendCommit, commit.CreateAmendCommit,
commit.CreateTag, commit.CreateTag,

View file

@ -539,6 +539,29 @@
"type": "boolean", "type": "boolean",
"description": "If true, do not allow force pushes" "description": "If true, do not allow force pushes"
}, },
"commitPrefix": {
"properties": {
"pattern": {
"type": "string",
"minLength": 1,
"description": "pattern to match on. E.g. for 'feature/AB-123' to match on the AB-123 use \"^\\\\w+\\\\/(\\\\w+-\\\\w+).*\"",
"examples": [
"^\\w+\\/(\\w+-\\w+).*"
]
},
"replace": {
"type": "string",
"minLength": 1,
"description": "Replace directive. E.g. for 'feature/AB-123' to start the commit message with 'AB-123 ' use \"[$1] \"",
"examples": [
"[$1] "
]
}
},
"additionalProperties": false,
"type": "object",
"description": "See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix"
},
"commitPrefixes": { "commitPrefixes": {
"additionalProperties": { "additionalProperties": {
"properties": { "properties": {