Merge branch 'master' of https://github.com/go-gitea/gitea
This commit is contained in:
commit
ab9f7b384d
13
.drone.yml
13
.drone.yml
|
|
@ -9,6 +9,14 @@ clone:
|
||||||
tags: true
|
tags: true
|
||||||
|
|
||||||
pipeline:
|
pipeline:
|
||||||
|
pre-build:
|
||||||
|
image: webhippie/nodejs:latest
|
||||||
|
pull: true
|
||||||
|
commands:
|
||||||
|
- npm install
|
||||||
|
- make stylesheets-check
|
||||||
|
when:
|
||||||
|
event: [ push, tag, pull_request ]
|
||||||
build:
|
build:
|
||||||
image: webhippie/golang:edge
|
image: webhippie/golang:edge
|
||||||
pull: true
|
pull: true
|
||||||
|
|
@ -16,14 +24,11 @@ pipeline:
|
||||||
TAGS: bindata sqlite
|
TAGS: bindata sqlite
|
||||||
GOPATH: /srv/app
|
GOPATH: /srv/app
|
||||||
commands:
|
commands:
|
||||||
- apk -U add nodejs nodejs-npm
|
|
||||||
- npm install
|
|
||||||
- make clean
|
- make clean
|
||||||
- make generate
|
- make generate
|
||||||
- make vet
|
- make vet
|
||||||
- make lint
|
- make lint
|
||||||
- make fmt-check
|
- make fmt-check
|
||||||
- make stylesheets-check
|
|
||||||
- make misspell-check
|
- make misspell-check
|
||||||
- make test-vendor
|
- make test-vendor
|
||||||
- make build
|
- make build
|
||||||
|
|
@ -212,6 +217,7 @@ pipeline:
|
||||||
pull: true
|
pull: true
|
||||||
secrets: [ crowdin_key ]
|
secrets: [ crowdin_key ]
|
||||||
project_identifier: gitea
|
project_identifier: gitea
|
||||||
|
ignore_branch: true
|
||||||
files:
|
files:
|
||||||
locale_en-US.ini: options/locale/locale_en-US.ini
|
locale_en-US.ini: options/locale/locale_en-US.ini
|
||||||
when:
|
when:
|
||||||
|
|
@ -221,6 +227,7 @@ pipeline:
|
||||||
github:
|
github:
|
||||||
image: plugins/github-release:1
|
image: plugins/github-release:1
|
||||||
pull: true
|
pull: true
|
||||||
|
secrets: [ github_token ]
|
||||||
files:
|
files:
|
||||||
- dist/release/*
|
- dist/release/*
|
||||||
when:
|
when:
|
||||||
|
|
|
||||||
14
Makefile
14
Makefile
|
|
@ -289,21 +289,17 @@ public/js/index.js: $(JAVASCRIPTS)
|
||||||
cat $< >| $@
|
cat $< >| $@
|
||||||
|
|
||||||
.PHONY: stylesheets-check
|
.PHONY: stylesheets-check
|
||||||
stylesheets-check: stylesheets
|
stylesheets-check: generate-stylesheets
|
||||||
@diff=$$(git diff public/css/index.css); \
|
@diff=$$(git diff public/css/index.css); \
|
||||||
if [ -n "$$diff" ]; then \
|
if [ -n "$$diff" ]; then \
|
||||||
echo "Please run 'make stylesheets' and commit the result:"; \
|
echo "Please run 'make generate-stylesheets' and commit the result:"; \
|
||||||
echo "$${diff}"; \
|
echo "$${diff}"; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi;
|
fi;
|
||||||
|
|
||||||
.PHONY: stylesheets
|
.PHONY: generate-stylesheets
|
||||||
stylesheets:
|
generate-stylesheets:
|
||||||
@hash minify > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
node_modules/.bin/lessc --no-ie-compat --clean-css public/less/index.less public/css/index.css
|
||||||
$(GO) get -u github.com/tdewolff/minify/cmd/minify; \
|
|
||||||
fi
|
|
||||||
node_modules/.bin/lessc --no-ie-compat public/less/index.less public/css/index.css
|
|
||||||
minify -o public/css/index.css public/css/index.css
|
|
||||||
|
|
||||||
.PHONY: swagger-ui
|
.PHONY: swagger-ui
|
||||||
swagger-ui:
|
swagger-ui:
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ func InitIssueIndexer() {
|
||||||
|
|
||||||
// populateIssueIndexer populate the issue indexer with issue data
|
// populateIssueIndexer populate the issue indexer with issue data
|
||||||
func populateIssueIndexer() error {
|
func populateIssueIndexer() error {
|
||||||
|
batch := indexer.IssueIndexerBatch()
|
||||||
for page := 1; ; page++ {
|
for page := 1; ; page++ {
|
||||||
repos, _, err := Repositories(&SearchRepoOptions{
|
repos, _, err := Repositories(&SearchRepoOptions{
|
||||||
Page: page,
|
Page: page,
|
||||||
|
|
@ -34,7 +35,7 @@ func populateIssueIndexer() error {
|
||||||
return fmt.Errorf("Repositories: %v", err)
|
return fmt.Errorf("Repositories: %v", err)
|
||||||
}
|
}
|
||||||
if len(repos) == 0 {
|
if len(repos) == 0 {
|
||||||
return nil
|
return batch.Flush()
|
||||||
}
|
}
|
||||||
for _, repo := range repos {
|
for _, repo := range repos {
|
||||||
issues, err := Issues(&IssuesOptions{
|
issues, err := Issues(&IssuesOptions{
|
||||||
|
|
@ -42,29 +43,37 @@ func populateIssueIndexer() error {
|
||||||
IsClosed: util.OptionalBoolNone,
|
IsClosed: util.OptionalBoolNone,
|
||||||
IsPull: util.OptionalBoolNone,
|
IsPull: util.OptionalBoolNone,
|
||||||
})
|
})
|
||||||
updates := make([]indexer.IssueIndexerUpdate, len(issues))
|
if err != nil {
|
||||||
for i, issue := range issues {
|
return err
|
||||||
updates[i] = issue.update()
|
|
||||||
}
|
}
|
||||||
if err = indexer.BatchUpdateIssues(updates...); err != nil {
|
for _, issue := range issues {
|
||||||
return fmt.Errorf("BatchUpdate: %v", err)
|
if err := batch.Add(issue.update()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func processIssueIndexerUpdateQueue() {
|
func processIssueIndexerUpdateQueue() {
|
||||||
|
batch := indexer.IssueIndexerBatch()
|
||||||
for {
|
for {
|
||||||
|
var issueID int64
|
||||||
select {
|
select {
|
||||||
case issueID := <-issueIndexerUpdateQueue:
|
case issueID = <-issueIndexerUpdateQueue:
|
||||||
issue, err := GetIssueByID(issueID)
|
default:
|
||||||
if err != nil {
|
// flush whatever updates we currently have, since we
|
||||||
log.Error(4, "issuesIndexer.Index: %v", err)
|
// might have to wait a while
|
||||||
continue
|
if err := batch.Flush(); err != nil {
|
||||||
}
|
log.Error(4, "IssueIndexer: %v", err)
|
||||||
if err = indexer.UpdateIssue(issue.update()); err != nil {
|
|
||||||
log.Error(4, "issuesIndexer.Index: %v", err)
|
|
||||||
}
|
}
|
||||||
|
issueID = <-issueIndexerUpdateQueue
|
||||||
|
}
|
||||||
|
issue, err := GetIssueByID(issueID)
|
||||||
|
if err != nil {
|
||||||
|
log.Error(4, "GetIssueByID: %v", err)
|
||||||
|
} else if err = batch.Add(issue.update()); err != nil {
|
||||||
|
log.Error(4, "IssueIndexer: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -227,7 +227,7 @@ func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
|
||||||
|
|
||||||
repo.NumMilestones = int(countRepoMilestones(sess, repo.ID))
|
repo.NumMilestones = int(countRepoMilestones(sess, repo.ID))
|
||||||
repo.NumClosedMilestones = int(countRepoClosedMilestones(sess, repo.ID))
|
repo.NumClosedMilestones = int(countRepoClosedMilestones(sess, repo.ID))
|
||||||
if _, err = sess.Id(repo.ID).AllCols().Update(repo); err != nil {
|
if _, err = sess.Id(repo.ID).Cols("num_milestones, num_closed_milestones").Update(repo); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return sess.Commit()
|
return sess.Commit()
|
||||||
|
|
@ -341,7 +341,7 @@ func DeleteMilestoneByRepoID(repoID, id int64) error {
|
||||||
|
|
||||||
repo.NumMilestones = int(countRepoMilestones(sess, repo.ID))
|
repo.NumMilestones = int(countRepoMilestones(sess, repo.ID))
|
||||||
repo.NumClosedMilestones = int(countRepoClosedMilestones(sess, repo.ID))
|
repo.NumClosedMilestones = int(countRepoClosedMilestones(sess, repo.ID))
|
||||||
if _, err = sess.Id(repo.ID).AllCols().Update(repo); err != nil {
|
if _, err = sess.Id(repo.ID).Cols("num_milestones, num_closed_milestones").Update(repo); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ func UpdateIssueUsersByMentions(e Engine, issueID int64, uids []int64) error {
|
||||||
|
|
||||||
iu.IsMentioned = true
|
iu.IsMentioned = true
|
||||||
if has {
|
if has {
|
||||||
_, err = e.Id(iu.ID).AllCols().Update(iu)
|
_, err = e.Id(iu.ID).Cols("is_mentioned").Update(iu)
|
||||||
} else {
|
} else {
|
||||||
_, err = e.Insert(iu)
|
_, err = e.Insert(iu)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -412,7 +412,7 @@ func ChangeOrgUserStatus(orgID, uid int64, public bool) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
ou.IsPublic = public
|
ou.IsPublic = public
|
||||||
_, err = x.Id(ou.ID).AllCols().Update(ou)
|
_, err = x.Id(ou.ID).Cols("is_public").Update(ou)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ func (t *Team) addRepository(e Engine, repo *Repository) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
t.NumRepos++
|
t.NumRepos++
|
||||||
if _, err = e.Id(t.ID).AllCols().Update(t); err != nil {
|
if _, err = e.Id(t.ID).Cols("num_repos").Update(t); err != nil {
|
||||||
return fmt.Errorf("update team: %v", err)
|
return fmt.Errorf("update team: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -142,7 +142,7 @@ func (t *Team) removeRepository(e Engine, repo *Repository, recalculate bool) (e
|
||||||
}
|
}
|
||||||
|
|
||||||
t.NumRepos--
|
t.NumRepos--
|
||||||
if _, err = e.Id(t.ID).AllCols().Update(t); err != nil {
|
if _, err = e.Id(t.ID).Cols("num_repos").Update(t); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -521,7 +521,7 @@ func AddTeamMember(team *Team, userID int64) error {
|
||||||
if team.IsOwnerTeam() {
|
if team.IsOwnerTeam() {
|
||||||
ou.IsOwner = true
|
ou.IsOwner = true
|
||||||
}
|
}
|
||||||
if _, err := sess.Id(ou.ID).AllCols().Update(ou); err != nil {
|
if _, err := sess.Id(ou.ID).Cols("num_teams, is_owner").Update(ou); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -552,7 +552,7 @@ func removeTeamMember(e Engine, team *Team, userID int64) error {
|
||||||
return err
|
return err
|
||||||
} else if _, err = e.
|
} else if _, err = e.
|
||||||
Id(team.ID).
|
Id(team.ID).
|
||||||
AllCols().
|
Cols("num_members").
|
||||||
Update(team); err != nil {
|
Update(team); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -579,7 +579,7 @@ func removeTeamMember(e Engine, team *Team, userID int64) error {
|
||||||
}
|
}
|
||||||
if _, err = e.
|
if _, err = e.
|
||||||
Id(ou.ID).
|
Id(ou.ID).
|
||||||
AllCols().
|
Cols("num_teams").
|
||||||
Update(ou); err != nil {
|
Update(ou); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -425,7 +425,7 @@ func (pr *PullRequest) setMerged() (err error) {
|
||||||
if err = pr.Issue.changeStatus(sess, pr.Merger, pr.Issue.Repo, true); err != nil {
|
if err = pr.Issue.changeStatus(sess, pr.Merger, pr.Issue.Repo, true); err != nil {
|
||||||
return fmt.Errorf("Issue.changeStatus: %v", err)
|
return fmt.Errorf("Issue.changeStatus: %v", err)
|
||||||
}
|
}
|
||||||
if _, err = sess.Id(pr.ID).AllCols().Update(pr); err != nil {
|
if _, err = sess.Id(pr.ID).Cols("has_merged").Update(pr); err != nil {
|
||||||
return fmt.Errorf("update pull request: %v", err)
|
return fmt.Errorf("update pull request: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1469,7 +1469,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
|
||||||
}
|
}
|
||||||
|
|
||||||
t.NumRepos--
|
t.NumRepos--
|
||||||
if _, err := sess.Id(t.ID).AllCols().Update(t); err != nil {
|
if _, err := sess.Id(t.ID).Cols("num_repos").Update(t); err != nil {
|
||||||
return fmt.Errorf("decrease team repository count '%d': %v", t.ID, err)
|
return fmt.Errorf("decrease team repository count '%d': %v", t.ID, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ func (repo *Repository) ChangeCollaborationAccessMode(uid int64, mode AccessMode
|
||||||
|
|
||||||
if _, err = sess.
|
if _, err = sess.
|
||||||
Id(collaboration.ID).
|
Id(collaboration.ID).
|
||||||
AllCols().
|
Cols("mode").
|
||||||
Update(collaboration); err != nil {
|
Update(collaboration); err != nil {
|
||||||
return fmt.Errorf("update collaboration: %v", err)
|
return fmt.Errorf("update collaboration: %v", err)
|
||||||
} else if _, err = sess.Exec("UPDATE access SET mode = ? WHERE user_id = ? AND repo_id = ?", mode, uid, repo.ID); err != nil {
|
} else if _, err = sess.Exec("UPDATE access SET mode = ? WHERE user_id = ? AND repo_id = ?", mode, uid, repo.ID); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -477,15 +477,8 @@ func ListPublicKeys(uid int64) ([]*PublicKey, error) {
|
||||||
Find(&keys)
|
Find(&keys)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdatePublicKey updates given public key.
|
|
||||||
func UpdatePublicKey(key *PublicKey) error {
|
|
||||||
_, err := x.Id(key.ID).AllCols().Update(key)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdatePublicKeyUpdated updates public key use time.
|
// UpdatePublicKeyUpdated updates public key use time.
|
||||||
func UpdatePublicKeyUpdated(id int64) error {
|
func UpdatePublicKeyUpdated(id int64) error {
|
||||||
now := time.Now()
|
|
||||||
// Check if key exists before update as affected rows count is unreliable
|
// Check if key exists before update as affected rows count is unreliable
|
||||||
// and will return 0 affected rows if two updates are made at the same time
|
// and will return 0 affected rows if two updates are made at the same time
|
||||||
if cnt, err := x.ID(id).Count(&PublicKey{}); err != nil {
|
if cnt, err := x.ID(id).Count(&PublicKey{}); err != nil {
|
||||||
|
|
@ -495,8 +488,7 @@ func UpdatePublicKeyUpdated(id int64) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := x.ID(id).Cols("updated_unix").Update(&PublicKey{
|
_, err := x.ID(id).Cols("updated_unix").Update(&PublicKey{
|
||||||
Updated: now,
|
UpdatedUnix: time.Now().Unix(),
|
||||||
UpdatedUnix: now.Unix(),
|
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -874,6 +874,10 @@ func UpdateUser(u *User) error {
|
||||||
|
|
||||||
// UpdateUserCols update user according special columns
|
// UpdateUserCols update user according special columns
|
||||||
func UpdateUserCols(u *User, cols ...string) error {
|
func UpdateUserCols(u *User, cols ...string) error {
|
||||||
|
return updateUserCols(x, u, cols...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateUserCols(e Engine, u *User, cols ...string) error {
|
||||||
// Organization does not need email
|
// Organization does not need email
|
||||||
u.Email = strings.ToLower(u.Email)
|
u.Email = strings.ToLower(u.Email)
|
||||||
if !u.IsOrganization() {
|
if !u.IsOrganization() {
|
||||||
|
|
@ -890,7 +894,7 @@ func UpdateUserCols(u *User, cols ...string) error {
|
||||||
u.Website = base.TruncateString(u.Website, 255)
|
u.Website = base.TruncateString(u.Website, 255)
|
||||||
u.Description = base.TruncateString(u.Description, 255)
|
u.Description = base.TruncateString(u.Description, 255)
|
||||||
|
|
||||||
_, err := x.Id(u.ID).Cols(cols...).Update(u)
|
_, err := e.Id(u.ID).Cols(cols...).Update(u)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -135,10 +135,10 @@ func (email *EmailAddress) Activate() error {
|
||||||
email.IsActivated = true
|
email.IsActivated = true
|
||||||
if _, err := sess.
|
if _, err := sess.
|
||||||
Id(email.ID).
|
Id(email.ID).
|
||||||
AllCols().
|
Cols("is_activated").
|
||||||
Update(email); err != nil {
|
Update(email); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if err = updateUser(sess, user); err != nil {
|
} else if err = updateUserCols(sess, user, "rands"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -222,7 +222,7 @@ func MakeEmailPrimary(email *EmailAddress) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
user.Email = email.Email
|
user.Email = email.Email
|
||||||
if _, err = sess.Id(user.ID).AllCols().Update(user); err != nil {
|
if _, err = sess.Id(user.ID).Cols("email").Update(user); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/blevesearch/bleve"
|
"github.com/blevesearch/bleve"
|
||||||
|
"github.com/blevesearch/bleve/analysis/token/unicodenorm"
|
||||||
|
"github.com/blevesearch/bleve/mapping"
|
||||||
"github.com/blevesearch/bleve/search/query"
|
"github.com/blevesearch/bleve/search/query"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -41,3 +43,50 @@ func newMatchPhraseQuery(matchPhrase, field, analyzer string) *query.MatchPhrase
|
||||||
q.Analyzer = analyzer
|
q.Analyzer = analyzer
|
||||||
return q
|
return q
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const unicodeNormalizeName = "unicodeNormalize"
|
||||||
|
|
||||||
|
func addUnicodeNormalizeTokenFilter(m *mapping.IndexMappingImpl) error {
|
||||||
|
return m.AddCustomTokenFilter(unicodeNormalizeName, map[string]interface{}{
|
||||||
|
"type": unicodenorm.Name,
|
||||||
|
"form": unicodenorm.NFC,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update represents an update to an indexer
|
||||||
|
type Update interface {
|
||||||
|
addToBatch(batch *bleve.Batch) error
|
||||||
|
}
|
||||||
|
|
||||||
|
const maxBatchSize = 16
|
||||||
|
|
||||||
|
// Batch batch of indexer updates that automatically flushes once it
|
||||||
|
// reaches a certain size
|
||||||
|
type Batch struct {
|
||||||
|
batch *bleve.Batch
|
||||||
|
index bleve.Index
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add add update to batch, possibly flushing
|
||||||
|
func (batch *Batch) Add(update Update) error {
|
||||||
|
if err := update.addToBatch(batch.batch); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return batch.flushIfFull()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (batch *Batch) flushIfFull() error {
|
||||||
|
if batch.batch.Size() >= maxBatchSize {
|
||||||
|
return batch.Flush()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flush manually flush the batch, regardless of its size
|
||||||
|
func (batch *Batch) Flush() error {
|
||||||
|
if err := batch.index.Batch(batch.batch); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
batch.batch.Reset()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import (
|
||||||
"github.com/blevesearch/bleve"
|
"github.com/blevesearch/bleve"
|
||||||
"github.com/blevesearch/bleve/analysis/analyzer/custom"
|
"github.com/blevesearch/bleve/analysis/analyzer/custom"
|
||||||
"github.com/blevesearch/bleve/analysis/token/lowercase"
|
"github.com/blevesearch/bleve/analysis/token/lowercase"
|
||||||
"github.com/blevesearch/bleve/analysis/token/unicodenorm"
|
|
||||||
"github.com/blevesearch/bleve/analysis/tokenizer/unicode"
|
"github.com/blevesearch/bleve/analysis/tokenizer/unicode"
|
||||||
"github.com/blevesearch/bleve/index/upsidedown"
|
"github.com/blevesearch/bleve/index/upsidedown"
|
||||||
)
|
)
|
||||||
|
|
@ -35,6 +34,10 @@ type IssueIndexerUpdate struct {
|
||||||
Data *IssueIndexerData
|
Data *IssueIndexerData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (update IssueIndexerUpdate) addToBatch(batch *bleve.Batch) error {
|
||||||
|
return batch.Index(indexerID(update.IssueID), update.Data)
|
||||||
|
}
|
||||||
|
|
||||||
const issueIndexerAnalyzer = "issueIndexer"
|
const issueIndexerAnalyzer = "issueIndexer"
|
||||||
|
|
||||||
// InitIssueIndexer initialize issue indexer
|
// InitIssueIndexer initialize issue indexer
|
||||||
|
|
@ -74,17 +77,13 @@ func createIssueIndexer() error {
|
||||||
docMapping.AddFieldMappingsAt("Content", textFieldMapping)
|
docMapping.AddFieldMappingsAt("Content", textFieldMapping)
|
||||||
docMapping.AddFieldMappingsAt("Comments", textFieldMapping)
|
docMapping.AddFieldMappingsAt("Comments", textFieldMapping)
|
||||||
|
|
||||||
const unicodeNormNFC = "unicodeNormNFC"
|
if err := addUnicodeNormalizeTokenFilter(mapping); err != nil {
|
||||||
if err := mapping.AddCustomTokenFilter(unicodeNormNFC, map[string]interface{}{
|
|
||||||
"type": unicodenorm.Name,
|
|
||||||
"form": unicodenorm.NFC,
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
return err
|
||||||
} else if err = mapping.AddCustomAnalyzer(issueIndexerAnalyzer, map[string]interface{}{
|
} else if err = mapping.AddCustomAnalyzer(issueIndexerAnalyzer, map[string]interface{}{
|
||||||
"type": custom.Name,
|
"type": custom.Name,
|
||||||
"char_filters": []string{},
|
"char_filters": []string{},
|
||||||
"tokenizer": unicode.Name,
|
"tokenizer": unicode.Name,
|
||||||
"token_filters": []string{unicodeNormNFC, lowercase.Name},
|
"token_filters": []string{unicodeNormalizeName, lowercase.Name},
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -97,21 +96,12 @@ func createIssueIndexer() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateIssue update the issue indexer
|
// IssueIndexerBatch batch to add updates to
|
||||||
func UpdateIssue(update IssueIndexerUpdate) error {
|
func IssueIndexerBatch() *Batch {
|
||||||
return issueIndexer.Index(indexerID(update.IssueID), update.Data)
|
return &Batch{
|
||||||
}
|
batch: issueIndexer.NewBatch(),
|
||||||
|
index: issueIndexer,
|
||||||
// BatchUpdateIssues perform a batch update of the issue indexer
|
|
||||||
func BatchUpdateIssues(updates ...IssueIndexerUpdate) error {
|
|
||||||
batch := issueIndexer.NewBatch()
|
|
||||||
for _, update := range updates {
|
|
||||||
err := batch.Index(indexerID(update.IssueID), update.Data)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return issueIndexer.Batch(batch)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SearchIssuesByKeyword searches for issues by given conditions.
|
// SearchIssuesByKeyword searches for issues by given conditions.
|
||||||
|
|
|
||||||
11
package.json
11
package.json
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"devDependencies": {
|
||||||
"less": "^2.7.2"
|
"less": "^2.7.2",
|
||||||
}
|
"less-plugin-clean-css": "^1.5.1"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user