This commit is contained in:
Sergio 2026-08-30 13:46:59 -07:00 committed by GitHub
commit 8d1c384747
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 38 additions and 7 deletions

View file

@ -343,6 +343,8 @@ type GitConfig struct {
CommitPrefixes map[string][]CommitPrefixConfig `yaml:"commitPrefixes"`
// See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-branch-name-prefix
BranchPrefix string `yaml:"branchPrefix"`
// Character(s) used to replace whitespace when sanitizing branch names.
BranchWhitespaceChar string `yaml:"branchWhitespaceChar"`
// If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀
// (This should really be under 'gui', not 'git')
ParseEmoji bool `yaml:"parseEmoji"`
@ -969,6 +971,7 @@ func GetDefaultConfigForPlatform(platform string) *UserConfig {
DisableForcePushing: false,
CommitPrefixes: map[string][]CommitPrefixConfig(nil),
BranchPrefix: "",
BranchWhitespaceChar: "-",
ParseEmoji: false,
TruncateCopiedCommitHashesTo: 12,
},

View file

@ -736,7 +736,7 @@ func (self *BranchesController) rename(branch *models.Branch) error {
InitialContent: branch.Name,
HandleConfirm: func(newBranchName string) error {
self.c.LogAction(self.c.Tr.Actions.RenameBranch)
if err := self.c.Git().Branch.Rename(branch.Name, helpers.SanitizedBranchName(newBranchName)); err != nil {
if err := self.c.Git().Branch.Rename(branch.Name, helpers.SanitizedBranchName(newBranchName, self.c.UserConfig().Git.BranchWhitespaceChar)); err != nil {
return err
}

View file

@ -390,7 +390,7 @@ func (self *RefsHelper) NewBranch(from string, fromFormattedName string, suggest
InitialContent: suggestedBranchName,
HandleConfirm: func(response string) error {
self.c.LogAction(self.c.Tr.Actions.CreateBranch)
newBranchName := SanitizedBranchName(response)
newBranchName := SanitizedBranchName(response, self.c.UserConfig().Git.BranchWhitespaceChar)
newBranchFunc := self.c.Git().Branch.New
if newBranchName != suggestedBranchName {
newBranchFunc = self.c.Git().Branch.NewWithoutTracking
@ -465,7 +465,7 @@ func (self *RefsHelper) MoveCommitsToNewBranch() error {
InitialContent: suggestedBranchName,
HandleConfirm: func(response string) error {
self.c.LogAction(self.c.Tr.MoveCommitsToNewBranch)
newBranchName := SanitizedBranchName(response)
newBranchName := SanitizedBranchName(response, self.c.UserConfig().Git.BranchWhitespaceChar)
return self.c.WithWaitingStatus(self.c.Tr.MovingCommitsToNewBranchStatus, func(gocui.Task) error {
return f(newBranchName)
})
@ -619,10 +619,13 @@ func (self *RefsHelper) CanMoveCommitsToNewBranch() *types.DisabledReason {
return nil
}
// SanitizedBranchName will remove all spaces in favor of a dash "-" to meet
// git's branch naming requirement.
func SanitizedBranchName(input string) string {
return strings.ReplaceAll(input, " ", "-")
// SanitizedBranchName will replace all spaces with the configured replacement
// string to meet git's branch naming requirement.
func SanitizedBranchName(input, whitespaceReplacement string) string {
if whitespaceReplacement == "" {
whitespaceReplacement = "-"
}
return strings.ReplaceAll(input, " ", whitespaceReplacement)
}
// Checks if the given branch name is a remote branch, and returns the name of

View file

@ -0,0 +1,25 @@
package helpers
import "testing"
func TestSanitizedBranchName(t *testing.T) {
tests := []struct {
name string
input string
whitespaceReplacement string
expected string
}{
{name: "default fallback", input: "feature new branch", whitespaceReplacement: "", expected: "feature-new-branch"},
{name: "custom replacement", input: "feature new branch", whitespaceReplacement: "_", expected: "feature_new_branch"},
{name: "multiple characters", input: "feature new branch", whitespaceReplacement: "--", expected: "feature--new--branch"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := SanitizedBranchName(tt.input, tt.whitespaceReplacement)
if got != tt.expected {
t.Fatalf("expected %q, got %q", tt.expected, got)
}
})
}
}