aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2022-04-25 15:28:47 +0200
committerGitHub <noreply@github.com>2022-04-25 15:28:47 +0200
commit8d7f1e430a0de9642c86c2818fd36c09804ed002 (patch)
tree1d57812a04de7d6dd5300bddc24a3e9e46e31688
parenta6b32adc457642350cb679b9fa26aad4eb86afc8 (diff)
downloadgitea-8d7f1e430a0de9642c86c2818fd36c09804ed002.tar.gz
gitea-8d7f1e430a0de9642c86c2818fd36c09804ed002.zip
User specific repoID or xorm builder conditions for issue search (#19475) (#19476)
-rw-r--r--models/issue.go21
-rw-r--r--models/issue_label.go7
-rw-r--r--models/issue_test.go5
-rw-r--r--modules/indexer/issues/indexer.go2
-rw-r--r--routers/api/v1/repo/issue.go5
-rw-r--r--routers/web/repo/issue.go2
-rw-r--r--routers/web/user/home.go10
-rw-r--r--services/migrations/gitea_uploader_test.go2
8 files changed, 22 insertions, 32 deletions
diff --git a/models/issue.go b/models/issue.go
index a30e77a91b..fe2b04ce21 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -1165,7 +1165,8 @@ func GetIssuesByIDs(issueIDs []int64) ([]*Issue, error) {
// IssuesOptions represents options of an issue.
type IssuesOptions struct {
db.ListOptions
- RepoIDs []int64 // include all repos if empty
+ RepoID int64 // overwrites RepoCond if not 0
+ RepoCond builder.Cond
AssigneeID int64
PosterID int64
MentionedID int64
@@ -1256,15 +1257,15 @@ func (opts *IssuesOptions) setupSessionNoLimit(sess *xorm.Session) {
sess.In("issue.id", opts.IssueIDs)
}
- if len(opts.RepoIDs) > 0 {
- applyReposCondition(sess, opts.RepoIDs)
+ if opts.RepoID != 0 {
+ opts.RepoCond = builder.Eq{"issue.repo_id": opts.RepoID}
+ }
+ if opts.RepoCond != nil {
+ sess.And(opts.RepoCond)
}
- switch opts.IsClosed {
- case util.OptionalBoolTrue:
- sess.And("issue.is_closed=?", true)
- case util.OptionalBoolFalse:
- sess.And("issue.is_closed=?", false)
+ if !opts.IsClosed.IsNone() {
+ sess.And("issue.is_closed=?", opts.IsClosed.IsTrue())
}
if opts.AssigneeID > 0 {
@@ -1383,10 +1384,6 @@ func issuePullAccessibleRepoCond(repoIDstr string, userID int64, org *Organizati
return cond
}
-func applyReposCondition(sess *xorm.Session, repoIDs []int64) *xorm.Session {
- return sess.In("issue.repo_id", repoIDs)
-}
-
func applyAssigneeCondition(sess *xorm.Session, assigneeID int64) *xorm.Session {
return sess.Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
And("issue_assignees.assignee_id = ?", assigneeID)
diff --git a/models/issue_label.go b/models/issue_label.go
index 53d28c0596..4124f3d74a 100644
--- a/models/issue_label.go
+++ b/models/issue_label.go
@@ -101,12 +101,9 @@ func (label *Label) CalOpenIssues() {
// CalOpenOrgIssues calculates the open issues of a label for a specific repo
func (label *Label) CalOpenOrgIssues(repoID, labelID int64) {
- repoIDs := []int64{repoID}
- labelIDs := []int64{labelID}
-
counts, _ := CountIssuesByRepo(&IssuesOptions{
- RepoIDs: repoIDs,
- LabelIDs: labelIDs,
+ RepoID: repoID,
+ LabelIDs: []int64{labelID},
})
for _, count := range counts {
diff --git a/models/issue_test.go b/models/issue_test.go
index aee9a50184..2581398acf 100644
--- a/models/issue_test.go
+++ b/models/issue_test.go
@@ -17,6 +17,7 @@ import (
user_model "code.gitea.io/gitea/models/user"
"github.com/stretchr/testify/assert"
+ "xorm.io/builder"
)
func TestIssue_ReplaceLabels(t *testing.T) {
@@ -153,7 +154,7 @@ func TestIssues(t *testing.T) {
},
{
IssuesOptions{
- RepoIDs: []int64{1, 3},
+ RepoCond: builder.In("repo_id", 1, 3),
SortType: "oldest",
ListOptions: db.ListOptions{
Page: 1,
@@ -340,7 +341,7 @@ func TestGetRepoIDsForIssuesOptions(t *testing.T) {
},
{
IssuesOptions{
- RepoIDs: []int64{1, 2},
+ RepoCond: builder.In("repo_id", 1, 2),
},
[]int64{1, 2},
},
diff --git a/modules/indexer/issues/indexer.go b/modules/indexer/issues/indexer.go
index 4db5091762..6aa4d8185b 100644
--- a/modules/indexer/issues/indexer.go
+++ b/modules/indexer/issues/indexer.go
@@ -272,7 +272,7 @@ func populateIssueIndexer(ctx context.Context) {
// UpdateRepoIndexer add/update all issues of the repositories
func UpdateRepoIndexer(repo *repo_model.Repository) {
is, err := models.Issues(&models.IssuesOptions{
- RepoIDs: []int64{repo.ID},
+ RepoID: repo.ID,
IsClosed: util.OptionalBoolNone,
IsPull: util.OptionalBoolNone,
})
diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go
index c6e08b00f3..b5b1659c93 100644
--- a/routers/api/v1/repo/issue.go
+++ b/routers/api/v1/repo/issue.go
@@ -173,6 +173,7 @@ func SearchIssues(ctx *context.APIContext) {
opts.TeamID = team.ID
}
+ repoCond := models.SearchRepositoryCondition(opts)
repoIDs, _, err := models.SearchRepositoryIDs(opts)
if err != nil {
ctx.Error(http.StatusInternalServerError, "SearchRepositoryByName", err)
@@ -233,7 +234,7 @@ func SearchIssues(ctx *context.APIContext) {
Page: ctx.FormInt("page"),
PageSize: limit,
},
- RepoIDs: repoIDs,
+ RepoCond: repoCond,
IsClosed: isClosed,
IssueIDs: issueIDs,
IncludedLabelNames: includedLabelNames,
@@ -460,7 +461,7 @@ func ListIssues(ctx *context.APIContext) {
if len(keyword) == 0 || len(issueIDs) > 0 || len(labelIDs) > 0 {
issuesOpt := &models.IssuesOptions{
ListOptions: listOptions,
- RepoIDs: []int64{ctx.Repo.Repository.ID},
+ RepoID: ctx.Repo.Repository.ID,
IsClosed: isClosed,
IssueIDs: issueIDs,
LabelIDs: labelIDs,
diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index bb24d0462c..248743471b 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -226,7 +226,7 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
Page: pager.Paginater.Current(),
PageSize: setting.UI.IssuePagingNum,
},
- RepoIDs: []int64{repo.ID},
+ RepoID: repo.ID,
AssigneeID: assigneeID,
PosterID: posterID,
MentionedID: mentionedID,
diff --git a/routers/web/user/home.go b/routers/web/user/home.go
index 6f1234d096..b2d9a9ca50 100644
--- a/routers/web/user/home.go
+++ b/routers/web/user/home.go
@@ -462,13 +462,7 @@ func buildIssueOverview(ctx *context.Context, unitType unit.Type) {
// to check if it's in the team(which possible isn't the case).
opts.User = nil
}
- userRepoIDs, _, err := models.SearchRepositoryIDs(repoOpts)
- if err != nil {
- ctx.ServerError("models.SearchRepositoryIDs: %v", err)
- return
- }
-
- opts.RepoIDs = userRepoIDs
+ opts.RepoCond = models.SearchRepositoryCondition(repoOpts)
}
// keyword holds the search term entered into the search field.
@@ -532,7 +526,7 @@ func buildIssueOverview(ctx *context.Context, unitType unit.Type) {
// Gets set when clicking filters on the issues overview page.
repoIDs := getRepoIDs(ctx.FormString("repos"))
if len(repoIDs) > 0 {
- opts.RepoIDs = repoIDs
+ opts.RepoCond = builder.In("issue.repo_id", repoIDs)
}
// ------------------------------
diff --git a/services/migrations/gitea_uploader_test.go b/services/migrations/gitea_uploader_test.go
index 7d4f77eac8..ed3e32952c 100644
--- a/services/migrations/gitea_uploader_test.go
+++ b/services/migrations/gitea_uploader_test.go
@@ -97,7 +97,7 @@ func TestGiteaUploadRepo(t *testing.T) {
assert.Len(t, releases, 1)
issues, err := models.Issues(&models.IssuesOptions{
- RepoIDs: []int64{repo.ID},
+ RepoID: repo.ID,
IsPull: util.OptionalBoolFalse,
SortType: "oldest",
})