Skip to content

Commit 0d9b174

Browse files
Merge branch 'main' into pacman-packages
2 parents ce8a049 + 2fc347b commit 0d9b174

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+722
-468
lines changed

go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ module code.gitea.io/gitea
22

33
go 1.23
44

5+
// rfc5280 said: "The serial number is an integer assigned by the CA to each certificate."
6+
// But some CAs use negative serial number, just relax the check. related:
7+
// Default TLS cert uses negative serial number #895 https://github.com/microsoft/mssql-docker/issues/895
8+
godebug x509negativeserial=1
9+
510
require (
611
code.gitea.io/actions-proto-go v0.4.0
712
code.gitea.io/gitea-vet v0.2.3

models/issues/issue_project.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ func (issue *Issue) ProjectColumnID(ctx context.Context) int64 {
4848
}
4949

5050
// LoadIssuesFromColumn load issues assigned to this column
51-
func LoadIssuesFromColumn(ctx context.Context, b *project_model.Column) (IssueList, error) {
52-
issueList, err := Issues(ctx, &IssuesOptions{
53-
ProjectColumnID: b.ID,
54-
ProjectID: b.ProjectID,
55-
SortType: "project-column-sorting",
56-
})
51+
func LoadIssuesFromColumn(ctx context.Context, b *project_model.Column, opts *IssuesOptions) (IssueList, error) {
52+
issueList, err := Issues(ctx, opts.Copy(func(o *IssuesOptions) {
53+
o.ProjectColumnID = b.ID
54+
o.ProjectID = b.ProjectID
55+
o.SortType = "project-column-sorting"
56+
}))
5757
if err != nil {
5858
return nil, err
5959
}
@@ -78,10 +78,10 @@ func LoadIssuesFromColumn(ctx context.Context, b *project_model.Column) (IssueLi
7878
}
7979

8080
// LoadIssuesFromColumnList load issues assigned to the columns
81-
func LoadIssuesFromColumnList(ctx context.Context, bs project_model.ColumnList) (map[int64]IssueList, error) {
81+
func LoadIssuesFromColumnList(ctx context.Context, bs project_model.ColumnList, opts *IssuesOptions) (map[int64]IssueList, error) {
8282
issuesMap := make(map[int64]IssueList, len(bs))
8383
for i := range bs {
84-
il, err := LoadIssuesFromColumn(ctx, bs[i])
84+
il, err := LoadIssuesFromColumn(ctx, bs[i], opts)
8585
if err != nil {
8686
return nil, err
8787
}

models/issues/issue_search.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,19 @@ type IssuesOptions struct { //nolint
5454
User *user_model.User // issues permission scope
5555
}
5656

57+
// Copy returns a copy of the options.
58+
// Be careful, it's not a deep copy, so `IssuesOptions.RepoIDs = {...}` is OK while `IssuesOptions.RepoIDs[0] = ...` is not.
59+
func (o *IssuesOptions) Copy(edit ...func(options *IssuesOptions)) *IssuesOptions {
60+
if o == nil {
61+
return nil
62+
}
63+
v := *o
64+
for _, e := range edit {
65+
e(&v)
66+
}
67+
return &v
68+
}
69+
5770
// applySorts sort an issues-related session based on the provided
5871
// sortType string
5972
func applySorts(sess *xorm.Session, sortType string, priorityRepoID int64) {

models/issues/review.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ func (r *Review) TooltipContent() string {
247247
}
248248
return "repo.issues.review.official"
249249
case ReviewTypeComment:
250-
return "repo.issues.review.comment"
250+
return "repo.issues.review.commented"
251251
case ReviewTypeReject:
252252
return "repo.issues.review.rejected"
253253
case ReviewTypeRequest:

models/organization/org_user.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import (
99

1010
"code.gitea.io/gitea/models/db"
1111
"code.gitea.io/gitea/models/perm"
12+
"code.gitea.io/gitea/models/unit"
1213
user_model "code.gitea.io/gitea/models/user"
14+
"code.gitea.io/gitea/modules/container"
1315
"code.gitea.io/gitea/modules/log"
1416

1517
"xorm.io/builder"
@@ -112,6 +114,49 @@ func IsUserOrgOwner(ctx context.Context, users user_model.UserList, orgID int64)
112114
return results
113115
}
114116

117+
// GetOrgAssignees returns all users that have write access and can be assigned to issues
118+
// of the any repository in the organization.
119+
func GetOrgAssignees(ctx context.Context, orgID int64) (_ []*user_model.User, err error) {
120+
e := db.GetEngine(ctx)
121+
userIDs := make([]int64, 0, 10)
122+
if err = e.Table("access").
123+
Join("INNER", "repository", "`repository`.id = `access`.repo_id").
124+
Where("`repository`.owner_id = ? AND `access`.mode >= ?", orgID, perm.AccessModeWrite).
125+
Select("user_id").
126+
Find(&userIDs); err != nil {
127+
return nil, err
128+
}
129+
130+
additionalUserIDs := make([]int64, 0, 10)
131+
if err = e.Table("team_user").
132+
Join("INNER", "team_repo", "`team_repo`.team_id = `team_user`.team_id").
133+
Join("INNER", "team_unit", "`team_unit`.team_id = `team_user`.team_id").
134+
Join("INNER", "repository", "`repository`.id = `team_repo`.repo_id").
135+
Where("`repository`.owner_id = ? AND (`team_unit`.access_mode >= ? OR (`team_unit`.access_mode = ? AND `team_unit`.`type` = ?))",
136+
orgID, perm.AccessModeWrite, perm.AccessModeRead, unit.TypePullRequests).
137+
Distinct("`team_user`.uid").
138+
Select("`team_user`.uid").
139+
Find(&additionalUserIDs); err != nil {
140+
return nil, err
141+
}
142+
143+
uniqueUserIDs := make(container.Set[int64])
144+
uniqueUserIDs.AddMultiple(userIDs...)
145+
uniqueUserIDs.AddMultiple(additionalUserIDs...)
146+
147+
users := make([]*user_model.User, 0, len(uniqueUserIDs))
148+
if len(userIDs) > 0 {
149+
if err = e.In("id", uniqueUserIDs.Values()).
150+
Where(builder.Eq{"`user`.is_active": true}).
151+
OrderBy(user_model.GetOrderByName()).
152+
Find(&users); err != nil {
153+
return nil, err
154+
}
155+
}
156+
157+
return users, nil
158+
}
159+
115160
func loadOrganizationOwners(ctx context.Context, users user_model.UserList, orgID int64) (map[int64]*TeamUser, error) {
116161
if len(users) == 0 {
117162
return nil, nil

models/repo/release.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ type FindReleasesOptions struct {
234234
IsDraft optional.Option[bool]
235235
TagNames []string
236236
HasSha1 optional.Option[bool] // useful to find draft releases which are created with existing tags
237+
NamePattern optional.Option[string]
237238
}
238239

239240
func (opts FindReleasesOptions) ToConds() builder.Cond {
@@ -261,6 +262,11 @@ func (opts FindReleasesOptions) ToConds() builder.Cond {
261262
cond = cond.And(builder.Eq{"sha1": ""})
262263
}
263264
}
265+
266+
if opts.NamePattern.Has() && opts.NamePattern.Value() != "" {
267+
cond = cond.And(builder.Like{"lower_tag_name", strings.ToLower(opts.NamePattern.Value())})
268+
}
269+
264270
return cond
265271
}
266272

modules/templates/util_avatar.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func AvatarHTML(src string, size int, class, name string) template.HTML {
3434
name = "avatar"
3535
}
3636

37-
return template.HTML(`<img class="` + class + `" src="` + src + `" title="` + html.EscapeString(name) + `" width="` + sizeStr + `" height="` + sizeStr + `"/>`)
37+
return template.HTML(`<img loading="lazy" class="` + class + `" src="` + src + `" title="` + html.EscapeString(name) + `" width="` + sizeStr + `" height="` + sizeStr + `"/>`)
3838
}
3939

4040
// Avatar renders user avatars. args: user, size (int), class (string)

options/locale/locale_cs-CZ.ini

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,6 @@ string.desc=Z – A
218218

219219
[error]
220220
occurred=Došlo k chybě
221-
missing_csrf=Špatný požadavek: Neexistuje CSRF token
222-
invalid_csrf=Špatný požadavek: Neplatný CSRF token
223221
not_found=Cíl nebyl nalezen.
224222
network_error=Chyba sítě
225223

@@ -1701,7 +1699,6 @@ issues.dependency.add_error_dep_not_same_repo=Oba úkoly musí být ve stejném
17011699
issues.review.self.approval=Nemůžete schválit svůj pull request.
17021700
issues.review.self.rejection=Nemůžete požadovat změny ve svém vlastním pull requestu.
17031701
issues.review.approve=schválil tyto změny %s
1704-
issues.review.comment=Okomentovat
17051702
issues.review.dismissed=zamítl/a posouzení od %s %s
17061703
issues.review.dismissed_label=Zamítnuto
17071704
issues.review.left_comment=zanechal komentář
@@ -1726,6 +1723,7 @@ issues.review.hide_resolved=Skrýt vyřešené
17261723
issues.review.resolve_conversation=Vyřešit konverzaci
17271724
issues.review.un_resolve_conversation=Nevyřešit konverzaci
17281725
issues.review.resolved_by=označil tuto konverzaci jako vyřešenou
1726+
issues.review.commented=Okomentovat
17291727
issues.assignee.error=Ne všichni zpracovatelé byli přidáni z důvodu neočekávané chyby.
17301728
issues.reference_issue.body=Tělo zprávy
17311729
issues.content_history.deleted=vymazáno

options/locale/locale_de-DE.ini

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,6 @@ string.desc=Z–A
213213

214214
[error]
215215
occurred=Ein Fehler ist aufgetreten
216-
missing_csrf=Fehlerhafte Anfrage: Kein CSRF Token verfügbar
217-
invalid_csrf=Fehlerhafte Anfrage: Ungültiger CSRF Token
218216
not_found=Das Ziel konnte nicht gefunden werden.
219217
network_error=Netzwerkfehler
220218

@@ -1681,7 +1679,6 @@ issues.dependency.add_error_dep_not_same_repo=Beide Issues müssen sich im selbe
16811679
issues.review.self.approval=Du kannst nicht dein eigenen Pull-Request genehmigen.
16821680
issues.review.self.rejection=Du kannst keine Änderungen an deinem eigenen Pull-Request anfragen.
16831681
issues.review.approve=hat die Änderungen %s genehmigt
1684-
issues.review.comment=Kommentieren
16851682
issues.review.dismissed=verwarf %ss Review %s
16861683
issues.review.dismissed_label=Verworfen
16871684
issues.review.left_comment=hat einen Kommentar hinterlassen
@@ -1706,6 +1703,7 @@ issues.review.hide_resolved=Gelöste ausblenden
17061703
issues.review.resolve_conversation=Diskussion als "erledigt" markieren
17071704
issues.review.un_resolve_conversation=Diskussion als "nicht-erledigt" markieren
17081705
issues.review.resolved_by=markierte diese Unterhaltung als gelöst
1706+
issues.review.commented=Kommentieren
17091707
issues.assignee.error=Aufgrund eines unerwarteten Fehlers konnten nicht alle Beauftragten hinzugefügt werden.
17101708
issues.reference_issue.body=Beschreibung
17111709
issues.content_history.deleted=gelöscht

options/locale/locale_el-GR.ini

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,6 @@ string.desc=Z - A
184184

185185
[error]
186186
occurred=Παρουσιάστηκε ένα σφάλμα
187-
missing_csrf=Bad Request: δεν υπάρχει διακριτικό CSRF
188-
invalid_csrf=Λάθος Αίτημα: μη έγκυρο διακριτικό CSRF
189187
not_found=Ο προορισμός δεν βρέθηκε.
190188
network_error=Σφάλμα δικτύου
191189

@@ -1603,7 +1601,6 @@ issues.dependency.add_error_dep_not_same_repo=Και τα δύο ζητήματ
16031601
issues.review.self.approval=Δεν μπορείτε να εγκρίνετε το δικό σας pull request.
16041602
issues.review.self.rejection=Δεν μπορείτε να ζητήσετε αλλαγές στο δικό σας pull request.
16051603
issues.review.approve=ενέκρινε αυτές τις αλλαγές %s
1606-
issues.review.comment=Σχόλιο
16071604
issues.review.dismissed=απέρριψε την αξιολόγηση %s %s
16081605
issues.review.dismissed_label=Απορρίφθηκε
16091606
issues.review.left_comment=άφησε ένα σχόλιο
@@ -1628,6 +1625,7 @@ issues.review.hide_resolved=Απόκρυψη επιλυμένων
16281625
issues.review.resolve_conversation=Επίλυση συνομιλίας
16291626
issues.review.un_resolve_conversation=Ανεπίλυτη συνομιλία
16301627
issues.review.resolved_by=σημείωση αυτή την συνομιλία ως επιλυμένη
1628+
issues.review.commented=Σχόλιο
16311629
issues.assignee.error=Δεν προστέθηκαν όλοι οι παραλήπτες λόγω απροσδόκητου σφάλματος.
16321630
issues.reference_issue.body=Σώμα
16331631
issues.content_history.deleted=διαγράφηκε

0 commit comments

Comments
 (0)