|
|
@ -15,7 +15,6 @@ import ( |
|
|
|
"code.gitea.io/gitea/modules/charset" |
|
|
|
"code.gitea.io/gitea/modules/charset" |
|
|
|
"code.gitea.io/gitea/modules/git" |
|
|
|
"code.gitea.io/gitea/modules/git" |
|
|
|
"code.gitea.io/gitea/modules/graceful" |
|
|
|
"code.gitea.io/gitea/modules/graceful" |
|
|
|
"code.gitea.io/gitea/modules/indexer" |
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/log" |
|
|
|
"code.gitea.io/gitea/modules/log" |
|
|
|
"code.gitea.io/gitea/modules/setting" |
|
|
|
"code.gitea.io/gitea/modules/setting" |
|
|
|
"github.com/ethantkoenig/rupture" |
|
|
|
"github.com/ethantkoenig/rupture" |
|
|
@ -39,7 +38,7 @@ func InitRepoIndexer() { |
|
|
|
go func() { |
|
|
|
go func() { |
|
|
|
start := time.Now() |
|
|
|
start := time.Now() |
|
|
|
log.Info("Initializing Repository Indexer") |
|
|
|
log.Info("Initializing Repository Indexer") |
|
|
|
indexer.InitRepoIndexer(populateRepoIndexerAsynchronously) |
|
|
|
initRepoIndexer(populateRepoIndexerAsynchronously) |
|
|
|
go processRepoIndexerOperationQueue() |
|
|
|
go processRepoIndexerOperationQueue() |
|
|
|
waitChannel <- time.Since(start) |
|
|
|
waitChannel <- time.Since(start) |
|
|
|
}() |
|
|
|
}() |
|
|
@ -130,7 +129,7 @@ func updateRepoIndexer(repoID int64) error { |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
batch := indexer.RepoIndexerBatch() |
|
|
|
batch := RepoIndexerBatch() |
|
|
|
for _, update := range changes.Updates { |
|
|
|
for _, update := range changes.Updates { |
|
|
|
if err := addUpdate(update, repo, batch); err != nil { |
|
|
|
if err := addUpdate(update, repo, batch); err != nil { |
|
|
|
return err |
|
|
|
return err |
|
|
@ -198,10 +197,10 @@ func addUpdate(update fileUpdate, repo *models.Repository, batch rupture.Flushin |
|
|
|
// FIXME: UTF-16 files will probably fail here
|
|
|
|
// FIXME: UTF-16 files will probably fail here
|
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
indexerUpdate := indexer.RepoIndexerUpdate{ |
|
|
|
indexerUpdate := RepoIndexerUpdate{ |
|
|
|
Filepath: update.Filename, |
|
|
|
Filepath: update.Filename, |
|
|
|
Op: indexer.RepoIndexerOpUpdate, |
|
|
|
Op: RepoIndexerOpUpdate, |
|
|
|
Data: &indexer.RepoIndexerData{ |
|
|
|
Data: &RepoIndexerData{ |
|
|
|
RepoID: repo.ID, |
|
|
|
RepoID: repo.ID, |
|
|
|
Content: string(charset.ToUTF8DropErrors(fileContents)), |
|
|
|
Content: string(charset.ToUTF8DropErrors(fileContents)), |
|
|
|
}, |
|
|
|
}, |
|
|
@ -210,10 +209,10 @@ func addUpdate(update fileUpdate, repo *models.Repository, batch rupture.Flushin |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func addDelete(filename string, repo *models.Repository, batch rupture.FlushingBatch) error { |
|
|
|
func addDelete(filename string, repo *models.Repository, batch rupture.FlushingBatch) error { |
|
|
|
indexerUpdate := indexer.RepoIndexerUpdate{ |
|
|
|
indexerUpdate := RepoIndexerUpdate{ |
|
|
|
Filepath: filename, |
|
|
|
Filepath: filename, |
|
|
|
Op: indexer.RepoIndexerOpDelete, |
|
|
|
Op: RepoIndexerOpDelete, |
|
|
|
Data: &indexer.RepoIndexerData{ |
|
|
|
Data: &RepoIndexerData{ |
|
|
|
RepoID: repo.ID, |
|
|
|
RepoID: repo.ID, |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
@ -279,7 +278,7 @@ func nonGenesisChanges(repo *models.Repository, revision string) (*repoChanges, |
|
|
|
// previous commit sha may have been removed by a force push, so
|
|
|
|
// previous commit sha may have been removed by a force push, so
|
|
|
|
// try rebuilding from scratch
|
|
|
|
// try rebuilding from scratch
|
|
|
|
log.Warn("git diff: %v", err) |
|
|
|
log.Warn("git diff: %v", err) |
|
|
|
if err = indexer.DeleteRepoFromIndexer(repo.ID); err != nil { |
|
|
|
if err = deleteRepoFromIndexer(repo.ID); err != nil { |
|
|
|
return nil, err |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
} |
|
|
|
return genesisChanges(repo, revision) |
|
|
|
return genesisChanges(repo, revision) |
|
|
@ -326,8 +325,8 @@ func processRepoIndexerOperationQueue() { |
|
|
|
op := <-repoIndexerOperationQueue |
|
|
|
op := <-repoIndexerOperationQueue |
|
|
|
var err error |
|
|
|
var err error |
|
|
|
if op.deleted { |
|
|
|
if op.deleted { |
|
|
|
if err = indexer.DeleteRepoFromIndexer(op.repoID); err != nil { |
|
|
|
if err = deleteRepoFromIndexer(op.repoID); err != nil { |
|
|
|
log.Error("DeleteRepoFromIndexer: %v", err) |
|
|
|
log.Error("deleteRepoFromIndexer: %v", err) |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
if err = updateRepoIndexer(op.repoID); err != nil { |
|
|
|
if err = updateRepoIndexer(op.repoID); err != nil { |
|
|
|