From 3a6edd36851b266612f3d325bebc716fc60bfed5 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Fri, 13 Aug 2021 15:06:18 +0200 Subject: [PATCH] Update issue_index to finish migration (#16685) * update issue_index to finish migration * One Func to RecalculateIssueIndexForRepo --- models/issue.go | 25 +++++++++++++++++++++++++ modules/migrations/gitea_uploader.go | 5 +++++ 2 files changed, 30 insertions(+) diff --git a/models/issue.go b/models/issue.go index 8b83612c2..804d7dc10 100644 --- a/models/issue.go +++ b/models/issue.go @@ -982,6 +982,31 @@ func newIssue(e *xorm.Session, doer *User, opts NewIssueOptions) (err error) { return opts.Issue.addCrossReferences(e, doer, false) } +// RecalculateIssueIndexForRepo create issue_index for repo if not exist and +// update it based on highest index of existing issues assigned to a repo +func RecalculateIssueIndexForRepo(repoID int64) error { + sess := x.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return err + } + + if err := upsertResourceIndex(sess, "issue_index", repoID); err != nil { + return err + } + + var max int64 + if _, err := sess.Select(" MAX(`index`)").Table("issue").Where("repo_id=?", repoID).Get(&max); err != nil { + return err + } + + if _, err := sess.Exec("UPDATE `issue_index` SET max_index=? WHERE group_id=?", max, repoID); err != nil { + return err + } + + return sess.Commit() +} + // NewIssue creates new issue with labels for repository. func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) { idx, err := GetNextResourceIndex("issue_index", repo.ID) diff --git a/modules/migrations/gitea_uploader.go b/modules/migrations/gitea_uploader.go index 2b18098b7..e852d0f88 100644 --- a/modules/migrations/gitea_uploader.go +++ b/modules/migrations/gitea_uploader.go @@ -871,6 +871,11 @@ func (g *GiteaLocalUploader) Finish() error { return ErrRepoNotCreated } + // update issue_index + if err := models.RecalculateIssueIndexForRepo(g.repo.ID); err != nil { + return err + } + g.repo.Status = models.RepositoryReady return models.UpdateRepositoryCols(g.repo, "status") }