Skip to content

Commit c3fa987

Browse files
committed
Display "new pull request" alert also on issue & PR lists
1 parent 4e10adc commit c3fa987

File tree

4 files changed

+70
-52
lines changed

4 files changed

+70
-52
lines changed

routers/utils/branch.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Copyright 2025 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package utils
5+
6+
import (
7+
git_model "code.gitea.io/gitea/models/git"
8+
access_model "code.gitea.io/gitea/models/perm/access"
9+
unit_model "code.gitea.io/gitea/models/unit"
10+
"code.gitea.io/gitea/modules/log"
11+
"code.gitea.io/gitea/services/context"
12+
repo_service "code.gitea.io/gitea/services/repository"
13+
)
14+
15+
func PrepareRecentlyPushedNewBranches(ctx *context.Context) {
16+
if ctx.Doer != nil {
17+
if err := ctx.Repo.Repository.GetBaseRepo(ctx); err != nil {
18+
ctx.ServerError("GetBaseRepo", err)
19+
return
20+
}
21+
22+
opts := &git_model.FindRecentlyPushedNewBranchesOptions{
23+
Repo: ctx.Repo.Repository,
24+
BaseRepo: ctx.Repo.Repository,
25+
}
26+
if ctx.Repo.Repository.IsFork {
27+
opts.BaseRepo = ctx.Repo.Repository.BaseRepo
28+
}
29+
30+
baseRepoPerm, err := access_model.GetUserRepoPermission(ctx, opts.BaseRepo, ctx.Doer)
31+
if err != nil {
32+
ctx.ServerError("GetUserRepoPermission", err)
33+
return
34+
}
35+
36+
if !opts.Repo.IsMirror && !opts.BaseRepo.IsMirror &&
37+
opts.BaseRepo.UnitEnabled(ctx, unit_model.TypePullRequests) &&
38+
baseRepoPerm.CanRead(unit_model.TypePullRequests) {
39+
var finalBranches []*git_model.RecentlyPushedNewBranch
40+
branches, err := git_model.FindRecentlyPushedNewBranches(ctx, ctx.Doer, opts)
41+
if err != nil {
42+
log.Error("FindRecentlyPushedNewBranches failed: %v", err)
43+
}
44+
45+
for _, branch := range branches {
46+
divergingInfo, err := repo_service.GetBranchDivergingInfo(ctx,
47+
branch.BranchRepo, branch.BranchName, // "base" repo for diverging info
48+
opts.BaseRepo, opts.BaseRepo.DefaultBranch, // "head" repo for diverging info
49+
)
50+
if err != nil {
51+
log.Error("GetBranchDivergingInfo failed: %v", err)
52+
continue
53+
}
54+
branchRepoHasNewCommits := divergingInfo.BaseHasNewCommits
55+
baseRepoCommitsBehind := divergingInfo.HeadCommitsBehind
56+
if branchRepoHasNewCommits || baseRepoCommitsBehind > 0 {
57+
finalBranches = append(finalBranches, branch)
58+
}
59+
}
60+
ctx.Data["RecentlyPushedNewBranches"] = finalBranches
61+
}
62+
}
63+
}

routers/web/repo/issue_list.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"code.gitea.io/gitea/modules/optional"
2626
"code.gitea.io/gitea/modules/setting"
2727
"code.gitea.io/gitea/modules/util"
28+
"code.gitea.io/gitea/routers/utils"
2829
"code.gitea.io/gitea/routers/web/shared/issue"
2930
shared_user "code.gitea.io/gitea/routers/web/shared/user"
3031
"code.gitea.io/gitea/services/context"
@@ -789,5 +790,7 @@ func Issues(ctx *context.Context) {
789790

790791
ctx.Data["CanWriteIssuesOrPulls"] = ctx.Repo.CanWriteIssuesOrPulls(isPullList)
791792

793+
utils.PrepareRecentlyPushedNewBranches(ctx)
794+
792795
ctx.HTML(http.StatusOK, tplIssues)
793796
}

routers/web/repo/view_home.go

Lines changed: 2 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515

1616
"code.gitea.io/gitea/models/db"
1717
git_model "code.gitea.io/gitea/models/git"
18-
access_model "code.gitea.io/gitea/models/perm/access"
1918
repo_model "code.gitea.io/gitea/models/repo"
2019
unit_model "code.gitea.io/gitea/models/unit"
2120
user_model "code.gitea.io/gitea/models/user"
@@ -28,6 +27,7 @@ import (
2827
"code.gitea.io/gitea/modules/setting"
2928
"code.gitea.io/gitea/modules/svg"
3029
"code.gitea.io/gitea/modules/util"
30+
"code.gitea.io/gitea/routers/utils"
3131
"code.gitea.io/gitea/routers/web/feed"
3232
"code.gitea.io/gitea/services/context"
3333
repo_service "code.gitea.io/gitea/services/repository"
@@ -196,56 +196,6 @@ func prepareUpstreamDivergingInfo(ctx *context.Context) {
196196
ctx.Data["UpstreamDivergingInfo"] = upstreamDivergingInfo
197197
}
198198

199-
func prepareRecentlyPushedNewBranches(ctx *context.Context) {
200-
if ctx.Doer != nil {
201-
if err := ctx.Repo.Repository.GetBaseRepo(ctx); err != nil {
202-
ctx.ServerError("GetBaseRepo", err)
203-
return
204-
}
205-
206-
opts := &git_model.FindRecentlyPushedNewBranchesOptions{
207-
Repo: ctx.Repo.Repository,
208-
BaseRepo: ctx.Repo.Repository,
209-
}
210-
if ctx.Repo.Repository.IsFork {
211-
opts.BaseRepo = ctx.Repo.Repository.BaseRepo
212-
}
213-
214-
baseRepoPerm, err := access_model.GetUserRepoPermission(ctx, opts.BaseRepo, ctx.Doer)
215-
if err != nil {
216-
ctx.ServerError("GetUserRepoPermission", err)
217-
return
218-
}
219-
220-
if !opts.Repo.IsMirror && !opts.BaseRepo.IsMirror &&
221-
opts.BaseRepo.UnitEnabled(ctx, unit_model.TypePullRequests) &&
222-
baseRepoPerm.CanRead(unit_model.TypePullRequests) {
223-
var finalBranches []*git_model.RecentlyPushedNewBranch
224-
branches, err := git_model.FindRecentlyPushedNewBranches(ctx, ctx.Doer, opts)
225-
if err != nil {
226-
log.Error("FindRecentlyPushedNewBranches failed: %v", err)
227-
}
228-
229-
for _, branch := range branches {
230-
divergingInfo, err := repo_service.GetBranchDivergingInfo(ctx,
231-
branch.BranchRepo, branch.BranchName, // "base" repo for diverging info
232-
opts.BaseRepo, opts.BaseRepo.DefaultBranch, // "head" repo for diverging info
233-
)
234-
if err != nil {
235-
log.Error("GetBranchDivergingInfo failed: %v", err)
236-
continue
237-
}
238-
branchRepoHasNewCommits := divergingInfo.BaseHasNewCommits
239-
baseRepoCommitsBehind := divergingInfo.HeadCommitsBehind
240-
if branchRepoHasNewCommits || baseRepoCommitsBehind > 0 {
241-
finalBranches = append(finalBranches, branch)
242-
}
243-
}
244-
ctx.Data["RecentlyPushedNewBranches"] = finalBranches
245-
}
246-
}
247-
}
248-
249199
func updateContextRepoEmptyAndStatus(ctx *context.Context, empty bool, status repo_model.RepositoryStatus) {
250200
if ctx.Repo.Repository.IsEmpty == empty && ctx.Repo.Repository.Status == status {
251201
return
@@ -471,7 +421,7 @@ func Home(ctx *context.Context) {
471421
prepareHomeSidebarRepoTopics,
472422
checkOutdatedBranch,
473423
prepareToRenderDirOrFile(entry),
474-
prepareRecentlyPushedNewBranches,
424+
utils.PrepareRecentlyPushedNewBranches,
475425
}
476426

477427
if isTreePathRoot {

templates/repo/issue/list.tmpl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<div class="ui container">
55
{{template "base/alert" .}}
66

7+
{{template "repo/code/recently_pushed_new_branches" .}}
8+
79
{{if .PinnedIssues}}
810
<div id="issue-pins" {{if .IsRepoAdmin}}data-is-repo-admin{{end}}>
911
{{range .PinnedIssues}}

0 commit comments

Comments
 (0)