refactor: optimize PR title generation and expand test coverage (#549)
- Import "regexp" package in pull_create.go - Replace existing code for `GetDefaultPRTitle` with a more efficient regular expression approach - Add a new test file pull_create_test.go with a test function for `GetDefaultPRTitle` Signed-off-by: appleboy <appleboy.tw@gmail.com> Reviewed-on: https://gitea.com/gitea/tea/pulls/549 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: techknowlogick <techknowlogick@noreply.gitea.io> Co-authored-by: appleboy <appleboy.tw@gmail.com> Co-committed-by: appleboy <appleboy.tw@gmail.com>
This commit is contained in:
parent
cd6a7b35c3
commit
4915862b95
|
@ -6,6 +6,7 @@ package task
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"code.gitea.io/sdk/gitea"
|
||||
|
@ -16,6 +17,12 @@ import (
|
|||
"code.gitea.io/tea/modules/utils"
|
||||
)
|
||||
|
||||
var (
|
||||
spaceRegex = regexp.MustCompile(`[\s_-]+`)
|
||||
noSpace = regexp.MustCompile(`^[^a-zA-Z\s]*`)
|
||||
consecutive = regexp.MustCompile(`[\s]{2,}`)
|
||||
)
|
||||
|
||||
// CreatePull creates a PR in the given repo and prints the result
|
||||
func CreatePull(ctx *context.TeaContext, base, head string, allowMaintainerEdits bool, opts *gitea.CreateIssueOption) (err error) {
|
||||
// default is default branch
|
||||
|
@ -65,7 +72,6 @@ func CreatePull(ctx *context.TeaContext, base, head string, allowMaintainerEdits
|
|||
Milestone: opts.Milestone,
|
||||
Deadline: opts.Deadline,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not create PR from %s to %s:%s: %s", head, ctx.Owner, base, err)
|
||||
}
|
||||
|
@ -133,13 +139,18 @@ func GetHeadSpec(owner, branch, baseOwner string) string {
|
|||
}
|
||||
|
||||
// GetDefaultPRTitle transforms a string like a branchname to a readable text
|
||||
func GetDefaultPRTitle(head string) string {
|
||||
title := head
|
||||
if strings.Contains(title, ":") {
|
||||
title = strings.SplitN(title, ":", 2)[1]
|
||||
func GetDefaultPRTitle(header string) string {
|
||||
// Extract the part after the last colon in the input string
|
||||
colonIndex := strings.LastIndex(header, ":")
|
||||
if colonIndex != -1 {
|
||||
header = header[colonIndex+1:]
|
||||
}
|
||||
title = strings.Replace(title, "-", " ", -1)
|
||||
title = strings.Replace(title, "_", " ", -1)
|
||||
|
||||
title := noSpace.ReplaceAllString(header, "")
|
||||
title = spaceRegex.ReplaceAllString(title, " ")
|
||||
title = strings.TrimSpace(title)
|
||||
title = strings.Title(strings.ToLower(title))
|
||||
title = consecutive.ReplaceAllString(title, " ")
|
||||
|
||||
return title
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package task
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestGetDefaultPRTitle(t *testing.T) {
|
||||
tests := []struct {
|
||||
input string
|
||||
want string
|
||||
}{
|
||||
{input: "Add new feature", want: "Add New Feature"},
|
||||
{input: "update-docs: Fix typo", want: "Fix Typo"},
|
||||
{input: "remove_long-string", want: "Remove Long String"},
|
||||
{input: "Replace_Underscores_With_Spaces", want: "Replace Underscores With Spaces"},
|
||||
{input: " leading-and-trailing-spaces ", want: "Leading And Trailing Spaces"},
|
||||
{input: "-----No--Upper--Case-----", want: "No Upper Case"},
|
||||
{input: "", want: ""},
|
||||
}
|
||||
for _, test := range tests {
|
||||
got := GetDefaultPRTitle(test.input)
|
||||
if got != test.want {
|
||||
t.Errorf("GetDefaultPRTitle(%q) = %q, want %q", test.input, got, test.want)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue