Skip to content

Commit 8753cb3

Browse files
authored
Merge branch 'main' into feat/add-searchbar-in-workflow-dropdown
2 parents 0e9ff39 + 60326ca commit 8753cb3

15 files changed

Lines changed: 243 additions & 173 deletions

File tree

models/actions/run.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"errors"
99
"fmt"
1010
"net/url"
11-
"strings"
11+
"strconv"
1212
"time"
1313

1414
"gitea.dev/models/db"
@@ -123,7 +123,9 @@ func (run *ActionRun) RefLink() string {
123123
func (run *ActionRun) PrettyRef() string {
124124
refName := git.RefName(run.Ref)
125125
if refName.IsPull() {
126-
return "#" + strings.TrimSuffix(strings.TrimPrefix(run.Ref, git.PullPrefix), "/head")
126+
if pullIndex, ok := refName.PullIndex(); ok {
127+
return "#" + strconv.FormatInt(pullIndex, 10)
128+
}
127129
}
128130
return refName.ShortName()
129131
}

models/issues/pull.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ func (pr *PullRequest) getReviewedByLines(ctx context.Context, writer io.Writer)
415415

416416
// GetGitHeadRefName returns git ref for hidden pull request branch
417417
func (pr *PullRequest) GetGitHeadRefName() string { // TODO: make it return RefName but not string
418-
return fmt.Sprintf("%s%d/head", git.PullPrefix, pr.Index)
418+
return git.RefNameFromPullIndex(pr.Index).String()
419419
}
420420

421421
// GetReviewCommentsCount returns the number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)

models/pull/automerge.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ func GetScheduledMergeByPullID(ctx context.Context, pullID int64) (bool, *AutoMe
8080
return true, scheduledPRM, err
8181
}
8282

83+
func GetScheduledMergePullIDsSince(ctx context.Context, since timeutil.TimeStamp) ([]int64, error) {
84+
var pullIDs []int64
85+
err := db.GetEngine(ctx).Table(&AutoMerge{}).Where("created_unix >= ?", since).Cols("pull_id").Find(&pullIDs)
86+
return pullIDs, err
87+
}
88+
8389
// DeleteScheduledAutoMerge delete a scheduled pull request
8490
func DeleteScheduledAutoMerge(ctx context.Context, pullID int64) error {
8591
exist, scheduledPRM, err := GetScheduledMergeByPullID(ctx, pullID)

modules/git/ref.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package git
66
import (
77
"context"
88
"regexp"
9+
"strconv"
910
"strings"
1011

1112
"gitea.dev/modules/git/gitcmd"
@@ -18,6 +19,7 @@ const (
1819
RemotePrefix = "refs/remotes/"
1920
// PullPrefix is the base directory of the pull information of git.
2021
PullPrefix = "refs/pull/"
22+
pullSuffix = "/head"
2123
)
2224

2325
// refNamePatternInvalid is regular expression with unallowed characters in git reference name
@@ -93,6 +95,10 @@ func RefNameFromCommit(shortName string) RefName {
9395
return RefName(shortName)
9496
}
9597

98+
func RefNameFromPullIndex(prIndex int64) RefName {
99+
return RefName(PullPrefix + strconv.FormatInt(prIndex, 10) + pullSuffix)
100+
}
101+
96102
func (ref RefName) String() string {
97103
return string(ref)
98104
}
@@ -134,14 +140,21 @@ func (ref RefName) BranchName() string {
134140
return ref.nameWithoutPrefix(BranchPrefix)
135141
}
136142

137-
// PullName returns the pull request name part of refs like refs/pull/<pull_name>/head
138-
func (ref RefName) PullName() string {
143+
func (ref RefName) PullIndex() (int64, bool) {
139144
refName := string(ref)
140-
lastIdx := strings.LastIndexByte(refName[len(PullPrefix):], '/')
141-
if strings.HasPrefix(refName, PullPrefix) && lastIdx > -1 {
142-
return refName[len(PullPrefix) : lastIdx+len(PullPrefix)]
145+
s, ok := strings.CutPrefix(refName, PullPrefix)
146+
if !ok {
147+
return 0, false
143148
}
144-
return ""
149+
pullStr, last, ok := strings.CutLast(s, "/")
150+
if !ok || last != "head" {
151+
return 0, false
152+
}
153+
pullIndex, err := strconv.ParseInt(pullStr, 10, 64)
154+
if err != nil {
155+
return 0, false
156+
}
157+
return pullIndex, true
145158
}
146159

147160
// ForBranchName returns the branch name part of refs like refs/for/<branch_name>
@@ -165,7 +178,7 @@ func (ref RefName) ShortName() string {
165178
return ref.RemoteName()
166179
}
167180
if ref.IsPull() {
168-
return ref.PullName()
181+
return strings.TrimSuffix(ref.nameWithoutPrefix(PullPrefix), pullSuffix)
169182
}
170183
if ref.IsFor() {
171184
return ref.ForBranchName()

modules/git/ref_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ func TestRefName(t *testing.T) {
1919
assert.Equal(t, "release/foo", RefName("refs/tags/release/foo").TagName())
2020

2121
// Test pull names
22-
assert.Equal(t, "1", RefName("refs/pull/1/head").PullName())
22+
pullIndex, ok := RefName("refs/pull/1/head").PullIndex()
23+
assert.True(t, ok)
24+
assert.EqualValues(t, 1, pullIndex)
2325
assert.True(t, RefName("refs/pull/1/head").IsPull())
2426
assert.True(t, RefName("refs/pull/1/merge").IsPull())
25-
assert.Equal(t, "my/pull", RefName("refs/pull/my/pull/head").PullName())
27+
assert.Equal(t, "my/pull", RefName("refs/pull/my/pull/head").ShortName())
2628

2729
// Test for branch names
2830
assert.Equal(t, "main", RefName("refs/for/main").ForBranchName())

routers/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ func InitWebInstalled(ctx context.Context) {
152152
mirror_service.InitSyncMirrors()
153153
mustInit(webhook.Init)
154154
mustInit(pull_service.Init)
155-
mustInit(automerge.Init)
155+
mustInitCtx(ctx, automerge.Init)
156156
mustInit(task.Init)
157157
mustInit(repo_migrations.Init)
158158
mustInit(websocket_service.Init)

0 commit comments

Comments
 (0)