summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/Config.md9
-rw-r--r--pkg/config/user_config.go2
-rw-r--r--pkg/gui/controllers/helpers/working_tree_helper.go6
-rw-r--r--pkg/integration/tests/commit/commit_with_global_prefix.go47
-rw-r--r--pkg/integration/tests/commit/commit_with_prefix.go2
-rw-r--r--pkg/integration/tests/test_list.go1
-rw-r--r--schema/config.json23
7 files changed, 86 insertions, 4 deletions
diff --git a/docs/Config.md b/docs/Config.md
index 077637ae8..d85637429 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -551,6 +551,15 @@ Example:
```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:
my_project: # This is repository folder name
pattern: "^\\w+\\/(\\w+-\\w+).*"
diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go
index c1562fcde..c22594461 100644
--- a/pkg/config/user_config.go
+++ b/pkg/config/user_config.go
@@ -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')
diff --git a/pkg/gui/controllers/helpers/working_tree_helper.go b/pkg/gui/controllers/helpers/working_tree_helper.go
index edd7005e9..a97639795 100644
--- a/pkg/gui/controllers/helpers/working_tree_helper.go
+++ b/pkg/gui/controllers/helpers/working_tree_helper.go
@@ -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
}
diff --git a/pkg/integration/tests/commit/commit_with_global_prefix.go b/pkg/integration/tests/commit/commit_with_global_prefix.go
new file mode 100644
index 000000000..80835682e
--- /dev/null
+++ b/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"))
+ },
+})
diff --git a/pkg/integration/tests/commit/commit_with_prefix.go b/pkg/integration/tests/commit/commit_with_prefix.go
index fe53327e4..53a6904f4 100644
--- a/pkg/integration/tests/commit/commit_with_prefix.go
+++ b/pkg/integration/tests/commit/commit_with_prefix.go
@@ -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) {
diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go
index cdbcc7871..1c94e3bbd 100644
--- a/pkg/integration/tests/test_list.go
+++ b/pkg/integration/tests/test_list.go
@@ -72,6 +72,7 @@ var tests = []*components.IntegrationTest{
commit.CommitMultiline,
commit.CommitSwitchToEditor,
commit.CommitWipWithPrefix,
+ commit.CommitWithGlobalPrefix,
commit.CommitWithPrefix,
commit.CreateAmendCommit,
commit.CreateTag,
diff --git a/schema/config.json b/schema/config.json
index 41a8859a4..05a2db151 100644
--- a/schema/config.json
+++ b/schema/config.json
@@ -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": {