Skip to content

Commit a7668dd

Browse files
committed
Follow @wxiaoguang's suggestion
1 parent f45b86a commit a7668dd

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

models/issues/issue.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,8 @@ func (issue *Issue) LoadAttributes(ctx context.Context) (err error) {
364364

365365
// IsPinned returns if a Issue is pinned
366366
func (issue *Issue) IsPinned() bool {
367-
if issue.PinOrder == 0 && (!setting.IsProd || setting.IsInTesting) {
368-
log.Fatal("issue's pinorder has not been loaded")
367+
if issue.PinOrder == 0 {
368+
setting.PanicInDevOrTesting("issue's pinorder has not been loaded")
369369
}
370370
return issue.PinOrder > 0
371371
}

models/issues/issue_pin.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,16 @@ func PinIssue(ctx context.Context, issue *Issue, user *user_model.User) error {
7070
return ErrIssueMaxPinReached
7171
}
7272

73+
pinnedIssuesMaxPinOrder, err := getPinnedIssuesMaxPinOrder(ctx, issue.RepoID, issue.IsPull)
74+
if err != nil {
75+
return err
76+
}
77+
7378
if _, err = db.GetEngine(ctx).Insert(&IssuePin{
7479
RepoID: issue.RepoID,
7580
IssueID: issue.ID,
7681
IsPull: issue.IsPull,
77-
PinOrder: pinnedIssuesNum + 1,
82+
PinOrder: pinnedIssuesMaxPinOrder + 1,
7883
}); err != nil {
7984
return err
8085
}
@@ -119,6 +124,12 @@ func getPinnedIssuesNum(ctx context.Context, repoID int64, isPull bool) (int, er
119124
return pinnedIssuesNum, err
120125
}
121126

127+
func getPinnedIssuesMaxPinOrder(ctx context.Context, repoID int64, isPull bool) (int, error) {
128+
var maxPinnedIssuesMaxPinOrder int
129+
_, err := db.GetEngine(ctx).SQL("SELECT max(pin_order) FROM issue_pin WHERE repo_id = ? AND is_pull = ?", repoID, isPull).Get(&maxPinnedIssuesMaxPinOrder)
130+
return maxPinnedIssuesMaxPinOrder, err
131+
}
132+
122133
// MovePin moves a Pinned Issue to a new Position
123134
func MovePin(ctx context.Context, issue *Issue, newPosition int) error {
124135
if newPosition < 1 {
@@ -134,9 +145,9 @@ func MovePin(ctx context.Context, issue *Issue, newPosition int) error {
134145
}
135146

136147
return db.WithTx(ctx, func(ctx context.Context) error {
137-
if issuePin.PinOrder > newPosition {
148+
if issuePin.PinOrder > newPosition { // move the issue to a lower position
138149
_, err = db.GetEngine(ctx).Exec("UPDATE issue_pin SET pin_order = pin_order + 1 WHERE repo_id = ? AND is_pull = ? AND pin_order >= ? AND pin_order < ?", issue.RepoID, issue.IsPull, newPosition, issuePin.PinOrder)
139-
} else {
150+
} else { // move the issue to a higher position
140151
// Lower the Position of all Pinned Issue that came after the current Position
141152
_, err = db.GetEngine(ctx).Exec("UPDATE issue_pin SET pin_order = pin_order - 1 WHERE repo_id = ? AND is_pull = ? AND pin_order > ? AND pin_order <= ?", issue.RepoID, issue.IsPull, issuePin.PinOrder, newPosition)
142153
}

services/convert/pull.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"code.gitea.io/gitea/modules/gitrepo"
1919
"code.gitea.io/gitea/modules/log"
2020
api "code.gitea.io/gitea/modules/structs"
21+
"code.gitea.io/gitea/modules/util"
2122
)
2223

2324
// ToAPIPullRequest assumes following fields have been assigned with valid values:
@@ -92,7 +93,7 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
9293
Deadline: apiIssue.Deadline,
9394
Created: pr.Issue.CreatedUnix.AsTimePtr(),
9495
Updated: pr.Issue.UpdatedUnix.AsTimePtr(),
95-
PinOrder: apiIssue.PinOrder,
96+
PinOrder: util.Iif(apiIssue.PinOrder == -1, 0, apiIssue.PinOrder),
9697

9798
AllowMaintainerEdit: pr.AllowMaintainerEdit,
9899

@@ -366,7 +367,7 @@ func ToAPIPullRequests(ctx context.Context, baseRepo *repo_model.Repository, prs
366367
Deadline: apiIssue.Deadline,
367368
Created: pr.Issue.CreatedUnix.AsTimePtr(),
368369
Updated: pr.Issue.UpdatedUnix.AsTimePtr(),
369-
PinOrder: apiIssue.PinOrder,
370+
PinOrder: util.Iif(apiIssue.PinOrder == -1, 0, apiIssue.PinOrder),
370371

371372
AllowMaintainerEdit: pr.AllowMaintainerEdit,
372373

0 commit comments

Comments
 (0)