@@ -10,21 +10,32 @@ import (
1010 "xorm.io/builder"
1111)
1212
13+ // RepoIndexerType specifies the repository indexer type
14+ type RepoIndexerType int
15+
16+ const (
17+ // RepoIndexerTypeCode code indexer
18+ RepoIndexerTypeCode RepoIndexerType = iota // 0
19+ // RepoIndexerTypeStats repository stats indexer
20+ RepoIndexerTypeStats // 1
21+ )
22+
1323// RepoIndexerStatus status of a repo's entry in the repo indexer
1424// For now, implicitly refers to default branch
1525type RepoIndexerStatus struct {
16- ID int64 `xorm:"pk autoincr"`
17- RepoID int64 `xorm:"INDEX"`
18- CommitSha string `xorm:"VARCHAR(40)"`
26+ ID int64 `xorm:"pk autoincr"`
27+ RepoID int64 `xorm:"INDEX(s)"`
28+ CommitSha string `xorm:"VARCHAR(40)"`
29+ IndexerType RepoIndexerType `xorm:"INDEX(s) NOT NULL DEFAULT 0"`
1930}
2031
2132// GetUnindexedRepos returns repos which do not have an indexer status
22- func GetUnindexedRepos (maxRepoID int64 , page , pageSize int ) ([]int64 , error ) {
33+ func GetUnindexedRepos (indexerType RepoIndexerType , maxRepoID int64 , page , pageSize int ) ([]int64 , error ) {
2334 ids := make ([]int64 , 0 , 50 )
2435 cond := builder .Cond (builder.IsNull {
2536 "repo_indexer_status.id" ,
2637 })
27- sess := x .Table ("repository" ).Join ("LEFT OUTER" , "repo_indexer_status" , "repository.id = repo_indexer_status.repo_id" )
38+ sess := x .Table ("repository" ).Join ("LEFT OUTER" , "repo_indexer_status" , "repository.id = repo_indexer_status.repo_id AND repo_indexer_status.indexer_type = ?" , indexerType )
2839 if maxRepoID > 0 {
2940 cond = builder .And (cond , builder.Lte {
3041 "repository.id" : maxRepoID ,
@@ -43,40 +54,64 @@ func GetUnindexedRepos(maxRepoID int64, page, pageSize int) ([]int64, error) {
4354 return ids , err
4455}
4556
46- // GetIndexerStatus loads repo codes indxer status
47- func (repo * Repository ) GetIndexerStatus () error {
48- if repo .IndexerStatus != nil {
49- return nil
57+ // getIndexerStatus loads repo codes indxer status
58+ func (repo * Repository ) getIndexerStatus (e Engine , indexerType RepoIndexerType ) (* RepoIndexerStatus , error ) {
59+ switch indexerType {
60+ case RepoIndexerTypeCode :
61+ if repo .CodeIndexerStatus != nil {
62+ return repo .CodeIndexerStatus , nil
63+ }
64+ case RepoIndexerTypeStats :
65+ if repo .StatsIndexerStatus != nil {
66+ return repo .StatsIndexerStatus , nil
67+ }
5068 }
51- status := & RepoIndexerStatus {RepoID : repo .ID }
52- has , err := x .Get (status )
69+ status := & RepoIndexerStatus {RepoID : repo .ID , IndexerType : indexerType }
70+ has , err := e .Get (status )
5371 if err != nil {
54- return err
72+ return nil , err
5573 } else if ! has {
5674 status .CommitSha = ""
5775 }
58- repo .IndexerStatus = status
59- return nil
76+ switch indexerType {
77+ case RepoIndexerTypeCode :
78+ repo .CodeIndexerStatus = status
79+ case RepoIndexerTypeStats :
80+ repo .StatsIndexerStatus = status
81+ }
82+ return status , nil
6083}
6184
62- // UpdateIndexerStatus updates indexer status
63- func (repo * Repository ) UpdateIndexerStatus (sha string ) error {
64- if err := repo .GetIndexerStatus (); err != nil {
85+ // GetIndexerStatus loads repo codes indxer status
86+ func (repo * Repository ) GetIndexerStatus (indexerType RepoIndexerType ) (* RepoIndexerStatus , error ) {
87+ return repo .getIndexerStatus (x , indexerType )
88+ }
89+
90+ // updateIndexerStatus updates indexer status
91+ func (repo * Repository ) updateIndexerStatus (e Engine , indexerType RepoIndexerType , sha string ) error {
92+ status , err := repo .getIndexerStatus (e , indexerType )
93+ if err != nil {
6594 return fmt .Errorf ("UpdateIndexerStatus: Unable to getIndexerStatus for repo: %s Error: %v" , repo .FullName (), err )
6695 }
67- if len (repo .IndexerStatus .CommitSha ) == 0 {
68- repo .IndexerStatus .CommitSha = sha
69- _ , err := x .Insert (repo .IndexerStatus )
96+
97+ if len (status .CommitSha ) == 0 {
98+ status .CommitSha = sha
99+ _ , err := e .Insert (status )
70100 if err != nil {
71101 return fmt .Errorf ("UpdateIndexerStatus: Unable to insert repoIndexerStatus for repo: %s Sha: %s Error: %v" , repo .FullName (), sha , err )
72102 }
73103 return nil
74104 }
75- repo . IndexerStatus .CommitSha = sha
76- _ , err := x .ID (repo . IndexerStatus .ID ).Cols ("commit_sha" ).
77- Update (repo . IndexerStatus )
105+ status .CommitSha = sha
106+ _ , err = e .ID (status .ID ).Cols ("commit_sha" ).
107+ Update (status )
78108 if err != nil {
79109 return fmt .Errorf ("UpdateIndexerStatus: Unable to update repoIndexerStatus for repo: %s Sha: %s Error: %v" , repo .FullName (), sha , err )
80110 }
81111 return nil
82112}
113+
114+ // UpdateIndexerStatus updates indexer status
115+ func (repo * Repository ) UpdateIndexerStatus (indexerType RepoIndexerType , sha string ) error {
116+ return repo .updateIndexerStatus (x , indexerType , sha )
117+ }
0 commit comments