Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add commitPrefix for defining a prefix for any project #3291

Merged
merged 1 commit into from May 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 9 additions & 0 deletions docs/Config.md
Expand Up @@ -549,6 +549,15 @@ Example:
- Branch name: feature/AB-123
- 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
git:
commitPrefixes:
Expand Down
2 changes: 2 additions & 0 deletions pkg/config/user_config.go
Expand Up @@ -222,6 +222,8 @@ type GitConfig struct {
// If true, do not allow force pushes
DisableForcePushing bool `yaml:"disableForcePushing"`
// 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"`
// If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀
// (This should really be under 'gui', not 'git')
Expand Down
6 changes: 3 additions & 3 deletions pkg/gui/controllers/helpers/working_tree_helper.go
Expand Up @@ -220,9 +220,9 @@ func (self *WorkingTreeHelper) prepareFilesForCommit() error {

func (self *WorkingTreeHelper) commitPrefixConfigForRepo() *config.CommitPrefixConfig {
cfg, ok := self.c.UserConfig.Git.CommitPrefixes[self.c.Git().RepoPaths.RepoName()]
if !ok {
return nil
if ok {
return &cfg
}

return &cfg
return self.c.UserConfig.Git.CommitPrefix
}
47 changes: 47 additions & 0 deletions pkg/integration/tests/commit/commit_with_global_prefix.go
@@ -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"))
},
})
2 changes: 1 addition & 1 deletion pkg/integration/tests/commit/commit_with_prefix.go
Expand Up @@ -6,7 +6,7 @@ import (
)

var CommitWithPrefix = NewIntegrationTest(NewIntegrationTestArgs{
Description: "Commit with defined config commitPrefix",
Description: "Commit with defined config commitPrefixes",
ExtraCmdArgs: []string{},
Skip: false,
SetupConfig: func(testConfig *config.AppConfig) {
Expand Down
1 change: 1 addition & 0 deletions pkg/integration/tests/test_list.go
Expand Up @@ -72,6 +72,7 @@ var tests = []*components.IntegrationTest{
commit.CommitMultiline,
commit.CommitSwitchToEditor,
commit.CommitWipWithPrefix,
commit.CommitWithGlobalPrefix,
commit.CommitWithPrefix,
commit.CreateAmendCommit,
commit.CreateTag,
Expand Down
23 changes: 23 additions & 0 deletions schema/config.json
Expand Up @@ -539,6 +539,29 @@
"type": "boolean",
"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": {
"additionalProperties": {
"properties": {
Expand Down