Filter deps with index.blacklist. (#64)

This commit is contained in:
scturtle 2018-08-30 23:47:48 +08:00 committed by Fangrui Song
parent 5c0a146ee4
commit df1717538f

View File

@ -141,7 +141,7 @@ std::unique_ptr<IndexFile> RawCacheLoad(const std::string &path) {
} }
bool Indexer_Parse(DiagnosticsPublisher *diag_pub, WorkingFiles *working_files, bool Indexer_Parse(DiagnosticsPublisher *diag_pub, WorkingFiles *working_files,
Project *project, VFS *vfs) { Project *project, VFS *vfs, const GroupMatch &matcher) {
std::optional<Index_Request> opt_request = index_request->TryPopFront(); std::optional<Index_Request> opt_request = index_request->TryPopFront();
if (!opt_request) if (!opt_request)
return false; return false;
@ -155,6 +155,11 @@ bool Indexer_Parse(DiagnosticsPublisher *diag_pub, WorkingFiles *working_files,
return false; return false;
} }
if (std::string reason; !matcher.IsMatch(request.path, &reason)) {
LOG_S(INFO) << "skip " << request.path << " for " << reason;
return false;
}
Project::Entry entry; Project::Entry entry;
{ {
std::lock_guard<std::mutex> lock(project->mutex_); std::lock_guard<std::mutex> lock(project->mutex_);
@ -247,6 +252,12 @@ bool Indexer_Parse(DiagnosticsPublisher *diag_pub, WorkingFiles *working_files,
std::string path = curr->path; std::string path = curr->path;
if (!(vfs->Stamp(path, curr->last_write_time) || path == path_to_index)) if (!(vfs->Stamp(path, curr->last_write_time) || path == path_to_index))
continue; continue;
if (std::string reason; !matcher.IsMatch(path, &reason)) {
LOG_S(INFO) << "skip emitting and storing index of " << path << " for "
<< reason;
continue;
}
LOG_S(INFO) << "emit index for " << path; LOG_S(INFO) << "emit index for " << path;
prev = RawCacheLoad(path); prev = RawCacheLoad(path);
@ -295,8 +306,9 @@ void Init() {
void Indexer_Main(DiagnosticsPublisher *diag_pub, VFS *vfs, Project *project, void Indexer_Main(DiagnosticsPublisher *diag_pub, VFS *vfs, Project *project,
WorkingFiles *working_files) { WorkingFiles *working_files) {
GroupMatch matcher(g_config->index.whitelist, g_config->index.blacklist);
while (true) while (true)
if (!Indexer_Parse(diag_pub, working_files, project, vfs)) if (!Indexer_Parse(diag_pub, working_files, project, vfs, matcher))
indexer_waiter->Wait(index_request); indexer_waiter->Wait(index_request);
} }