mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-04 10:34:55 +02:00
94 lines
2.5 KiB
Go
94 lines
2.5 KiB
Go
package gui
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
|
)
|
|
|
|
func (gui *Gui) gitFlowFinishBranch(gitFlowConfig string, branchName string) error {
|
|
// need to find out what kind of branch this is
|
|
prefix := strings.SplitAfterN(branchName, "/", 2)[0]
|
|
suffix := strings.Replace(branchName, prefix, "", 1)
|
|
|
|
branchType := ""
|
|
for _, line := range strings.Split(strings.TrimSpace(gitFlowConfig), "\n") {
|
|
if strings.HasPrefix(line, "gitflow.prefix.") && strings.HasSuffix(line, prefix) {
|
|
// now I just need to how do you say
|
|
regex := regexp.MustCompile("gitflow.prefix.([^ ]*) .*")
|
|
matches := regex.FindAllStringSubmatch(line, 1)
|
|
|
|
if len(matches) > 0 && len(matches[0]) > 1 {
|
|
branchType = matches[0][1]
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
if branchType == "" {
|
|
return gui.createErrorPanel(gui.Tr.NotAGitFlowBranch)
|
|
}
|
|
|
|
return gui.runSubprocessWithSuspenseAndRefresh(
|
|
gui.OSCommand.WithSpan(gui.Tr.Spans.GitFlowFinish).PrepareSubProcess("git", "flow", branchType, "finish", suffix),
|
|
)
|
|
}
|
|
|
|
func (gui *Gui) handleCreateGitFlowMenu() error {
|
|
branch := gui.getSelectedBranch()
|
|
if branch == nil {
|
|
return nil
|
|
}
|
|
|
|
// get config
|
|
gitFlowConfig, err := gui.GitCommand.RunCommandWithOutput("git config --local --get-regexp gitflow")
|
|
if err != nil {
|
|
return gui.createErrorPanel("You need to install git-flow and enable it in this repo to use git-flow features")
|
|
}
|
|
|
|
startHandler := func(branchType string) func() error {
|
|
return func() error {
|
|
title := utils.ResolvePlaceholderString(gui.Tr.NewGitFlowBranchPrompt, map[string]string{"branchType": branchType})
|
|
|
|
return gui.prompt(promptOpts{
|
|
title: title,
|
|
handleConfirm: func(name string) error {
|
|
return gui.runSubprocessWithSuspenseAndRefresh(
|
|
gui.OSCommand.WithSpan(gui.Tr.Spans.GitFlowStart).PrepareSubProcess("git", "flow", branchType, "start", name),
|
|
)
|
|
},
|
|
})
|
|
}
|
|
}
|
|
|
|
menuItems := []*menuItem{
|
|
{
|
|
// not localising here because it's one to one with the actual git flow commands
|
|
displayString: fmt.Sprintf("finish branch '%s'", branch.Name),
|
|
onPress: func() error {
|
|
return gui.gitFlowFinishBranch(gitFlowConfig, branch.Name)
|
|
},
|
|
},
|
|
{
|
|
displayString: "start feature",
|
|
onPress: startHandler("feature"),
|
|
},
|
|
{
|
|
displayString: "start hotfix",
|
|
onPress: startHandler("hotfix"),
|
|
},
|
|
{
|
|
displayString: "start bugfix",
|
|
onPress: startHandler("bugfix"),
|
|
},
|
|
{
|
|
displayString: "start release",
|
|
onPress: startHandler("release"),
|
|
},
|
|
}
|
|
|
|
return gui.createMenu("git flow", menuItems, createMenuOptions{})
|
|
}
|