mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-25 05:12:41 +01:00
Index code and stats only for non-empty repositories (#10251)
Fix test and switch to unique queue Fix MySQL support when deleting old statistics
This commit is contained in:
parent
ff261dafc4
commit
a1d796f521
4 changed files with 19 additions and 7 deletions
|
@ -4,6 +4,7 @@
|
||||||
owner_name: user2
|
owner_name: user2
|
||||||
lower_name: repo1
|
lower_name: repo1
|
||||||
name: repo1
|
name: repo1
|
||||||
|
is_empty: false
|
||||||
is_private: false
|
is_private: false
|
||||||
num_issues: 2
|
num_issues: 2
|
||||||
num_closed_issues: 1
|
num_closed_issues: 1
|
||||||
|
|
|
@ -34,6 +34,8 @@ func GetUnindexedRepos(indexerType RepoIndexerType, maxRepoID int64, page, pageS
|
||||||
ids := make([]int64, 0, 50)
|
ids := make([]int64, 0, 50)
|
||||||
cond := builder.Cond(builder.IsNull{
|
cond := builder.Cond(builder.IsNull{
|
||||||
"repo_indexer_status.id",
|
"repo_indexer_status.id",
|
||||||
|
}).And(builder.Eq{
|
||||||
|
"repository.is_empty": false,
|
||||||
})
|
})
|
||||||
sess := x.Table("repository").Join("LEFT OUTER", "repo_indexer_status", "repository.id = repo_indexer_status.repo_id AND repo_indexer_status.indexer_type = ?", indexerType)
|
sess := x.Table("repository").Join("LEFT OUTER", "repo_indexer_status", "repository.id = repo_indexer_status.repo_id AND repo_indexer_status.indexer_type = ?", indexerType)
|
||||||
if maxRepoID > 0 {
|
if maxRepoID > 0 {
|
||||||
|
@ -66,11 +68,11 @@ func (repo *Repository) getIndexerStatus(e Engine, indexerType RepoIndexerType)
|
||||||
return repo.StatsIndexerStatus, nil
|
return repo.StatsIndexerStatus, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
status := &RepoIndexerStatus{RepoID: repo.ID, IndexerType: indexerType}
|
status := &RepoIndexerStatus{RepoID: repo.ID}
|
||||||
has, err := e.Get(status)
|
if has, err := e.Where("`indexer_type` = ?", indexerType).Get(status); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if !has {
|
} else if !has {
|
||||||
|
status.IndexerType = indexerType
|
||||||
status.CommitSha = ""
|
status.CommitSha = ""
|
||||||
}
|
}
|
||||||
switch indexerType {
|
switch indexerType {
|
||||||
|
|
|
@ -125,10 +125,19 @@ func (repo *Repository) UpdateLanguageStats(commitID string, stats map[string]fl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Delete old languages
|
// Delete old languages
|
||||||
if _, err := sess.Where("`id` IN (SELECT `id` FROM `language_stat` WHERE `repo_id` = ? AND `commit_id` != ?)", repo.ID, commitID).Delete(&LanguageStat{}); err != nil {
|
statsToDelete := make([]int64, 0, len(oldstats))
|
||||||
return err
|
for _, s := range oldstats {
|
||||||
|
if s.CommitID != commitID {
|
||||||
|
statsToDelete = append(statsToDelete, s.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(statsToDelete) > 0 {
|
||||||
|
if _, err := sess.In("`id`", statsToDelete).Delete(&LanguageStat{}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update indexer status
|
||||||
if err = repo.updateIndexerStatus(sess, RepoIndexerTypeStats, commitID); err != nil {
|
if err = repo.updateIndexerStatus(sess, RepoIndexerTypeStats, commitID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// statsQueue represents a queue to handle repository stats updates
|
// statsQueue represents a queue to handle repository stats updates
|
||||||
var statsQueue queue.Queue
|
var statsQueue queue.UniqueQueue
|
||||||
|
|
||||||
// handle passed PR IDs and test the PRs
|
// handle passed PR IDs and test the PRs
|
||||||
func handle(data ...queue.Data) {
|
func handle(data ...queue.Data) {
|
||||||
|
@ -27,7 +27,7 @@ func handle(data ...queue.Data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func initStatsQueue() error {
|
func initStatsQueue() error {
|
||||||
statsQueue = queue.CreateQueue("repo_stats_update", handle, int64(0)).(queue.Queue)
|
statsQueue = queue.CreateUniqueQueue("repo_stats_update", handle, int64(0)).(queue.UniqueQueue)
|
||||||
if statsQueue == nil {
|
if statsQueue == nil {
|
||||||
return fmt.Errorf("Unable to create repo_stats_update Queue")
|
return fmt.Errorf("Unable to create repo_stats_update Queue")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue