1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-11-27 22:38:09 +02:00

Use branchPrefix when moving commits to new branch (#4604)

- **PR Description**

When pressing N to move new commits to a new branch we get greeted with
an empty prompt, this PR makes it so we fill the empty prompt with a
suggestion taken from branchPrefix, similar to the good old create a new
branch.
This commit is contained in:
Stefan Haller
2025-05-29 22:42:37 +02:00
committed by GitHub
2 changed files with 28 additions and 14 deletions

View File

@@ -325,13 +325,10 @@ func (self *RefsHelper) NewBranch(from string, fromFormattedName string, suggest
if suggestedBranchName == "" { if suggestedBranchName == "" {
var err error var err error
suggestedBranchName, err = utils.ResolveTemplate(self.c.UserConfig().Git.BranchPrefix, nil, template.FuncMap{ suggestedBranchName, err = self.getSuggestedBranchName()
"runCommand": self.c.Git().Custom.TemplateFunctionRunCommand,
})
if err != nil { if err != nil {
return err return err
} }
suggestedBranchName = strings.ReplaceAll(suggestedBranchName, "\t", " ")
} }
refresh := func() error { refresh := func() error {
@@ -399,16 +396,21 @@ func (self *RefsHelper) MoveCommitsToNewBranch() error {
return err return err
} }
withNewBranchNamePrompt := func(baseBranchName string, f func(string, string) error) { withNewBranchNamePrompt := func(baseBranchName string, f func(string, string) error) error {
prompt := utils.ResolvePlaceholderString( prompt := utils.ResolvePlaceholderString(
self.c.Tr.NewBranchNameBranchOff, self.c.Tr.NewBranchNameBranchOff,
map[string]string{ map[string]string{
"branchName": baseBranchName, "branchName": baseBranchName,
}, },
) )
suggestedBranchName, err := self.getSuggestedBranchName()
if err != nil {
return err
}
self.c.Prompt(types.PromptOpts{ self.c.Prompt(types.PromptOpts{
Title: prompt, Title: prompt,
InitialContent: suggestedBranchName,
HandleConfirm: func(response string) error { HandleConfirm: func(response string) error {
self.c.LogAction(self.c.Tr.MoveCommitsToNewBranch) self.c.LogAction(self.c.Tr.MoveCommitsToNewBranch)
newBranchName := SanitizedBranchName(response) newBranchName := SanitizedBranchName(response)
@@ -417,6 +419,7 @@ func (self *RefsHelper) MoveCommitsToNewBranch() error {
}) })
}, },
}) })
return nil
} }
isMainBranch := lo.Contains(self.c.UserConfig().Git.MainBranches, currentBranch.Name) isMainBranch := lo.Contains(self.c.UserConfig().Git.MainBranches, currentBranch.Name)
@@ -431,8 +434,7 @@ func (self *RefsHelper) MoveCommitsToNewBranch() error {
Title: self.c.Tr.MoveCommitsToNewBranch, Title: self.c.Tr.MoveCommitsToNewBranch,
Prompt: prompt, Prompt: prompt,
HandleConfirm: func() error { HandleConfirm: func() error {
withNewBranchNamePrompt(currentBranch.Name, self.moveCommitsToNewBranchStackedOnCurrentBranch) return withNewBranchNamePrompt(currentBranch.Name, self.moveCommitsToNewBranchStackedOnCurrentBranch)
return nil
}, },
}) })
return nil return nil
@@ -452,17 +454,15 @@ func (self *RefsHelper) MoveCommitsToNewBranch() error {
{ {
Label: fmt.Sprintf(self.c.Tr.MoveCommitsToNewBranchFromBaseItem, shortBaseBranchName), Label: fmt.Sprintf(self.c.Tr.MoveCommitsToNewBranchFromBaseItem, shortBaseBranchName),
OnPress: func() error { OnPress: func() error {
withNewBranchNamePrompt(shortBaseBranchName, func(currentBranch string, newBranchName string) error { return withNewBranchNamePrompt(shortBaseBranchName, func(currentBranch string, newBranchName string) error {
return self.moveCommitsToNewBranchOffOfMainBranch(currentBranch, newBranchName, baseBranchRef) return self.moveCommitsToNewBranchOffOfMainBranch(currentBranch, newBranchName, baseBranchRef)
}) })
return nil
}, },
}, },
{ {
Label: fmt.Sprintf(self.c.Tr.MoveCommitsToNewBranchStackedItem, currentBranch.Name), Label: fmt.Sprintf(self.c.Tr.MoveCommitsToNewBranchStackedItem, currentBranch.Name),
OnPress: func() error { OnPress: func() error {
withNewBranchNamePrompt(currentBranch.Name, self.moveCommitsToNewBranchStackedOnCurrentBranch) return withNewBranchNamePrompt(currentBranch.Name, self.moveCommitsToNewBranchStackedOnCurrentBranch)
return nil
}, },
}, },
}, },
@@ -587,3 +587,14 @@ func (self *RefsHelper) ParseRemoteBranchName(fullBranchName string) (string, st
func IsSwitchBranchUncommittedChangesError(err error) bool { func IsSwitchBranchUncommittedChangesError(err error) bool {
return strings.Contains(err.Error(), "Please commit your changes or stash them before you switch branch") return strings.Contains(err.Error(), "Please commit your changes or stash them before you switch branch")
} }
func (self *RefsHelper) getSuggestedBranchName() (string, error) {
suggestedBranchName, err := utils.ResolveTemplate(self.c.UserConfig().Git.BranchPrefix, nil, template.FuncMap{
"runCommand": self.c.Git().Custom.TemplateFunctionRunCommand,
})
if err != nil {
return suggestedBranchName, err
}
suggestedBranchName = strings.ReplaceAll(suggestedBranchName, "\t", " ")
return suggestedBranchName, nil
}

View File

@@ -9,7 +9,9 @@ var MoveCommitsToNewBranchKeepStacked = NewIntegrationTest(NewIntegrationTestArg
Description: "Create a new branch from the commits that you accidentally made on the wrong branch; choosing stacked on current branch", Description: "Create a new branch from the commits that you accidentally made on the wrong branch; choosing stacked on current branch",
ExtraCmdArgs: []string{}, ExtraCmdArgs: []string{},
Skip: false, Skip: false,
SetupConfig: func(config *config.AppConfig) {}, SetupConfig: func(config *config.AppConfig) {
config.GetUserConfig().Git.BranchPrefix = "myprefix/"
},
SetupRepo: func(shell *Shell) { SetupRepo: func(shell *Shell) {
shell.EmptyCommit("initial commit") shell.EmptyCommit("initial commit")
shell.CloneIntoRemote("origin") shell.CloneIntoRemote("origin")
@@ -42,12 +44,13 @@ var MoveCommitsToNewBranchKeepStacked = NewIntegrationTest(NewIntegrationTestArg
t.ExpectPopup().Prompt(). t.ExpectPopup().Prompt().
Title(Equals("New branch name (branch is off of 'feature')")). Title(Equals("New branch name (branch is off of 'feature')")).
InitialText(Equals("myprefix/")).
Type("new branch"). Type("new branch").
Confirm() Confirm()
t.Views().Branches(). t.Views().Branches().
Lines( Lines(
Contains("new-branch").DoesNotContain("↑").IsSelected(), Contains("myprefix/new-branch").DoesNotContain("↑").IsSelected(),
Contains("feature ✓"), Contains("feature ✓"),
Contains("master ✓"), Contains("master ✓"),
) )