Skip to content

Commit 81a7a7f

Browse files
committed
Merge branch 'master' into issue-4173-alternative-fix
2 parents e851f00 + 0514376 commit 81a7a7f

30 files changed

+541
-213
lines changed

.drone.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,12 +281,22 @@ pipeline:
281281
event: [ push ]
282282
branch: [ master ]
283283

284+
docker-dryrun:
285+
image: plugins/docker:17.12
286+
pull: true
287+
repo: gitea/gitea
288+
cache_from: gitea/gitea
289+
dry_run: true
290+
when:
291+
event: [ pull_request ]
292+
284293
docker:
285294
image: plugins/docker:17.12
286295
pull: true
287296
secrets: [ docker_username, docker_password ]
288297
repo: gitea/gitea
289298
tags: [ '${DRONE_BRANCH##release/v}' ]
299+
cache_from: gitea/gitea
290300
when:
291301
event: [ push ]
292302
branch: [ release/* ]
@@ -296,6 +306,7 @@ pipeline:
296306
secrets: [ docker_username, docker_password ]
297307
pull: true
298308
repo: gitea/gitea
309+
cache_from: gitea/gitea
299310
default_tags: true
300311
when:
301312
event: [ push, tag ]

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ coverage.all
6262
/integrations/pgsql.ini
6363
/integrations/mssql.ini
6464
/node_modules
65+
/modules/indexer/issues/indexers
6566

6667

6768
# Snapcraft

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ coverage:
176176

177177
.PHONY: unit-test-coverage
178178
unit-test-coverage:
179-
for PKG in $(PACKAGES); do $(GO) test -tags='sqlite sqlite_unlock_notify' -cover -coverprofile $$GOPATH/src/$$PKG/coverage.out $$PKG || exit 1; done;
179+
$(GO) test -tags='sqlite sqlite_unlock_notify' -cover -coverprofile coverage.out $(PACKAGES) && echo "\n==>\033[32m Ok\033[m\n" || exit 1
180180

181181
.PHONY: vendor
182182
vendor:

custom/conf/app.ini.sample

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,9 +253,19 @@ DB_RETRIES = 10
253253
; Backoff time per DB retry (time.Duration)
254254
DB_RETRY_BACKOFF = 3s
255255

256-
257256
[indexer]
257+
; Issue indexer type, currently support: bleve or db, default is bleve
258+
ISSUE_INDEXER_TYPE = bleve
259+
; Issue indexer storage path, available when ISSUE_INDEXER_TYPE is bleve
258260
ISSUE_INDEXER_PATH = indexers/issues.bleve
261+
; Issue indexer queue, currently support: channel or levelqueue, default is levelqueue
262+
ISSUE_INDEXER_QUEUE_TYPE = levelqueue
263+
; When ISSUE_INDEXER_QUEUE_TYPE is levelqueue, this will be the queue will be saved path,
264+
; default is indexers/issues.queue
265+
ISSUE_INDEXER_QUEUE_DIR = indexers/issues.queue
266+
; Batch queue number, default is 20
267+
ISSUE_INDEXER_QUEUE_BATCH_NUMBER = 20
268+
259269
; repo indexer by default disabled, since it uses a lot of disk space
260270
REPO_INDEXER_ENABLED = false
261271
REPO_INDEXER_PATH = indexers/repos.bleve

docs/content/doc/advanced/config-cheat-sheet.en-us.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,12 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
154154

155155
## Indexer (`indexer`)
156156

157+
- `ISSUE_INDEXER_TYPE`: **bleve**: Issue indexer type, currently support: bleve or db, if it's db, below issue indexer item will be invalid.
157158
- `ISSUE_INDEXER_PATH`: **indexers/issues.bleve**: Index file used for issue search.
159+
- `ISSUE_INDEXER_QUEUE_TYPE`: **levelqueue**: Issue indexer queue, currently support: channel or levelqueue
160+
- `ISSUE_INDEXER_QUEUE_DIR`: **indexers/issues.queue**: When ISSUE_INDEXER_QUEUE_TYPE is levelqueue, this will be the queue will be saved path
161+
- `ISSUE_INDEXER_QUEUE_BATCH_NUMBER`: **20**: Batch queue number
162+
158163
- `REPO_INDEXER_ENABLED`: **false**: Enables code search (uses a lot of disk space).
159164
- `REPO_INDEXER_PATH`: **indexers/repos.bleve**: Index file used for code search.
160165
- `UPDATE_BUFFER_LEN`: **20**: Buffer length of index request.

docs/content/doc/advanced/config-cheat-sheet.zh-cn.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,20 @@ menu:
8282
- `PATH`: Tidb 或者 SQLite3 数据文件存放路径。
8383
- `LOG_SQL`: **true**: 显示生成的SQL,默认为真。
8484

85+
86+
## Indexer (`indexer`)
87+
88+
- `ISSUE_INDEXER_TYPE`: **bleve**: 工单索引类型,当前支持 `bleve``db`,当为 `db` 时其它工单索引项可不用设置。
89+
- `ISSUE_INDEXER_PATH`: **indexers/issues.bleve**: 工单索引文件存放路径,当索引类型为 `bleve` 时有效。
90+
- `ISSUE_INDEXER_QUEUE_TYPE`: **levelqueue**: 工单索引队列类型,当前支持 `channel``levelqueue`
91+
- `ISSUE_INDEXER_QUEUE_DIR`: **indexers/issues.queue**: 当 `ISSUE_INDEXER_QUEUE_TYPE``levelqueue` 时,保存索引队列的磁盘路径。
92+
- `ISSUE_INDEXER_QUEUE_BATCH_NUMBER`: **20**: 队列处理中批量提交数量。
93+
94+
- `REPO_INDEXER_ENABLED`: **false**: 是否启用代码搜索(启用后会占用比较大的磁盘空间)。
95+
- `REPO_INDEXER_PATH`: **indexers/repos.bleve**: 用于代码搜索的索引文件路径。
96+
- `UPDATE_BUFFER_LEN`: **20**: 代码索引请求的缓冲区长度。
97+
- `MAX_FILE_SIZE`: **1048576**: 进行解析的源代码文件的最大长度,小于该值时才会索引。
98+
8599
## Security (`security`)
86100

87101
- `INSTALL_LOCK`: 是否允许运行安装向导,(跟管理员账号有关,十分重要)。

models/issue.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,11 @@ func getIssueIDsByRepoID(e Engine, repoID int64) ([]int64, error) {
12311231
return ids, err
12321232
}
12331233

1234+
// GetIssueIDsByRepoID returns all issue ids by repo id
1235+
func GetIssueIDsByRepoID(repoID int64) ([]int64, error) {
1236+
return getIssueIDsByRepoID(x, repoID)
1237+
}
1238+
12341239
// GetIssuesByIDs return issues with the given IDs.
12351240
func GetIssuesByIDs(issueIDs []int64) ([]*Issue, error) {
12361241
return getIssuesByIDs(x, issueIDs)
@@ -1679,6 +1684,40 @@ func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen
16791684
return openResult, closedResult
16801685
}
16811686

1687+
// SearchIssueIDsByKeyword search issues on database
1688+
func SearchIssueIDsByKeyword(kw string, repoID int64, limit, start int) (int64, []int64, error) {
1689+
var repoCond = builder.Eq{"repo_id": repoID}
1690+
var subQuery = builder.Select("id").From("issue").Where(repoCond)
1691+
var cond = builder.And(
1692+
repoCond,
1693+
builder.Or(
1694+
builder.Like{"name", kw},
1695+
builder.Like{"content", kw},
1696+
builder.In("id", builder.Select("issue_id").
1697+
From("comment").
1698+
Where(builder.And(
1699+
builder.Eq{"type": CommentTypeComment},
1700+
builder.In("issue_id", subQuery),
1701+
builder.Like{"content", kw},
1702+
)),
1703+
),
1704+
),
1705+
)
1706+
1707+
var ids = make([]int64, 0, limit)
1708+
err := x.Distinct("id").Table("issue").Where(cond).Limit(limit, start).Find(&ids)
1709+
if err != nil {
1710+
return 0, nil, err
1711+
}
1712+
1713+
total, err := x.Distinct("id").Table("issue").Where(cond).Count()
1714+
if err != nil {
1715+
return 0, nil, err
1716+
}
1717+
1718+
return total, ids, nil
1719+
}
1720+
16821721
func updateIssue(e Engine, issue *Issue) error {
16831722
_, err := e.ID(issue.ID).AllCols().Update(issue)
16841723
if err != nil {

models/issue_indexer.go

Lines changed: 0 additions & 148 deletions
This file was deleted.

models/issue_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,3 +295,28 @@ func TestIssue_loadTotalTimes(t *testing.T) {
295295
assert.NoError(t, ms.loadTotalTimes(x))
296296
assert.Equal(t, int64(3662), ms.TotalTrackedTime)
297297
}
298+
299+
func TestIssue_SearchIssueIDsByKeyword(t *testing.T) {
300+
assert.NoError(t, PrepareTestDatabase())
301+
302+
total, ids, err := SearchIssueIDsByKeyword("issue2", 1, 10, 0)
303+
assert.NoError(t, err)
304+
assert.EqualValues(t, 1, total)
305+
assert.EqualValues(t, []int64{2}, ids)
306+
307+
total, ids, err = SearchIssueIDsByKeyword("first", 1, 10, 0)
308+
assert.NoError(t, err)
309+
assert.EqualValues(t, 1, total)
310+
assert.EqualValues(t, []int64{1}, ids)
311+
312+
total, ids, err = SearchIssueIDsByKeyword("for", 1, 10, 0)
313+
assert.NoError(t, err)
314+
assert.EqualValues(t, 4, total)
315+
assert.EqualValues(t, []int64{1, 2, 3, 5}, ids)
316+
317+
// issue1's comment id 2
318+
total, ids, err = SearchIssueIDsByKeyword("good", 1, 10, 0)
319+
assert.NoError(t, err)
320+
assert.EqualValues(t, 1, total)
321+
assert.EqualValues(t, []int64{1}, ids)
322+
}

models/repo_permission.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,15 @@ func getUserRepoPermission(e Engine, repo *Repository, user *User) (perm Permiss
151151
return
152152
}
153153

154+
// if user in an owner team
155+
for _, team := range teams {
156+
if team.Authorize >= AccessModeOwner {
157+
perm.AccessMode = AccessModeOwner
158+
perm.UnitsMode = nil
159+
return
160+
}
161+
}
162+
154163
for _, u := range repo.Units {
155164
var found bool
156165
for _, team := range teams {

models/repo_permission_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,17 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
219219
assert.True(t, perm.CanWrite(unit.Type))
220220
}
221221

222+
// update team information and then check permission
223+
team := AssertExistsAndLoadBean(t, &Team{ID: 5}).(*Team)
224+
err = UpdateTeamUnits(team, nil)
225+
assert.NoError(t, err)
226+
perm, err = GetUserRepoPermission(repo, owner)
227+
assert.NoError(t, err)
228+
for _, unit := range repo.Units {
229+
assert.True(t, perm.CanRead(unit.Type))
230+
assert.True(t, perm.CanWrite(unit.Type))
231+
}
232+
222233
// org member team tester
223234
tester := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
224235
perm, err = GetUserRepoPermission(repo, tester)

models/unit_tests.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,6 @@ func MainTest(m *testing.M, pathToGiteaRoot string) {
4444
fatalTestError("Error creating test engine: %v\n", err)
4545
}
4646

47-
if err = InitIssueIndexer(); err != nil {
48-
fatalTestError("Error InitIssueIndexer: %v\n", err)
49-
}
50-
5147
setting.AppURL = "https://try.gitea.io/"
5248
setting.RunUser = "runuser"
5349
setting.SSH.Port = 3000

models/user.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,6 +1433,9 @@ func SearchUsers(opts *SearchUserOptions) (users []*User, _ int64, _ error) {
14331433
if opts.PageSize > 0 {
14341434
sess = sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
14351435
}
1436+
if opts.PageSize == -1 {
1437+
opts.PageSize = int(count)
1438+
}
14361439

14371440
users = make([]*User, 0, opts.PageSize)
14381441
return users, count, sess.OrderBy(opts.OrderBy.String()).Find(&users)

0 commit comments

Comments
 (0)