From 4245bac1db8aef3853c2827a2e884a4ffeec867f Mon Sep 17 00:00:00 2001 From: Jacob Dufault Date: Wed, 16 Aug 2017 19:06:28 -0700 Subject: [PATCH] Make import pipeline a bit more flexible w.r.t. writing indexed content to disk. --- src/cache.cc | 5 +---- src/command_line.cc | 27 ++++++++++++++++----------- src/indexer.h | 2 -- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/cache.cc b/src/cache.cc index 871d7e7f..15e858d2 100644 --- a/src/cache.cc +++ b/src/cache.cc @@ -32,10 +32,7 @@ std::unique_ptr LoadCachedIndex(Config* config, if (!file_content) return nullptr; - auto result = Deserialize(filename, *file_content, IndexFile::kCurrentVersion); - if (result) - result->is_loaded_from_cache_ = true; - return result; + return Deserialize(filename, *file_content, IndexFile::kCurrentVersion); } optional LoadCachedFileContents(Config* config, diff --git a/src/command_line.cc b/src/command_line.cc index aed189d3..4253b601 100644 --- a/src/command_line.cc +++ b/src/command_line.cc @@ -561,15 +561,18 @@ struct Index_DoIdMap { PerformanceImportFile perf; bool is_interactive = false; + bool write_to_disk = false; bool load_previous = false; Index_DoIdMap( std::unique_ptr current, PerformanceImportFile perf, - bool is_interactive) + bool is_interactive, + bool write_to_disk) : current(std::move(current)), perf(perf), - is_interactive(is_interactive) {} + is_interactive(is_interactive), + write_to_disk(write_to_disk) {} }; struct Index_OnIdMapped { @@ -586,12 +589,15 @@ struct Index_OnIdMapped { PerformanceImportFile perf; bool is_interactive; + bool write_to_disk; Index_OnIdMapped( PerformanceImportFile perf, - bool is_interactive) + bool is_interactive, + bool write_to_disk) : perf(perf), - is_interactive(is_interactive) {} + is_interactive(is_interactive), + write_to_disk(write_to_disk) {} }; struct Index_OnIndexed { @@ -876,7 +882,7 @@ std::vector DoParseFile( bool is_interactive = false; // TODO/FIXME: real perf PerformanceImportFile perf; - result.push_back(Index_DoIdMap(cache_loader->TryTakeOrLoad(path), perf, is_interactive)); + result.push_back(Index_DoIdMap(cache_loader->TryTakeOrLoad(path), perf, is_interactive, false /*write_to_disk*/)); for (const std::string& dependency : previous_index->dependencies) { // Only actually load the file if we haven't loaded it yet. Important // for perf when files have lots of common dependencies. @@ -884,7 +890,7 @@ std::vector DoParseFile( continue; LOG_S(INFO) << "Emitting index result for " << dependency; - result.push_back(Index_DoIdMap(cache_loader->TryTakeOrLoad(dependency), perf, is_interactive)); + result.push_back(Index_DoIdMap(cache_loader->TryTakeOrLoad(dependency), perf, is_interactive, false /*write_to_disk*/)); } return result; } @@ -948,7 +954,7 @@ std::vector DoParseFile( // TODO/FIXME: real is_interactive bool is_interactive = false; LOG_S(INFO) << "Emitting index result for " << new_index->path; - result.push_back(Index_DoIdMap(std::move(new_index), perf, is_interactive)); + result.push_back(Index_DoIdMap(std::move(new_index), perf, is_interactive, true /*write_to_disk*/)); } return result; @@ -1024,12 +1030,11 @@ bool IndexMain_DoCreateIndexUpdate( previous_index, response->current->file.get()); response->perf.index_make_delta = time.ElapsedMicrosecondsAndReset(); - // Write new cache to disk if it is a fresh index. - if (!response->current->file->is_loaded_from_cache_) { + // Write current index to disk if requested. + if (response->write_to_disk) { time.Reset(); WriteToCache(config, *response->current->file); response->perf.index_save_to_disk = time.ElapsedMicrosecondsAndReset(); - timestamp_manager->UpdateCachedModificationTime(response->current->file->path, response->current->file->last_modification_time); } @@ -1160,7 +1165,7 @@ bool QueryDb_ImportMain(Config* config, QueryDatabase* db, QueueManager* queue, continue; } - Index_OnIdMapped response(request->perf, request->is_interactive); + Index_OnIdMapped response(request->perf, request->is_interactive, request->write_to_disk); Timer time; assert(request->current); diff --git a/src/indexer.h b/src/indexer.h index 01dbcdc6..9949f98c 100644 --- a/src/indexer.h +++ b/src/indexer.h @@ -480,8 +480,6 @@ struct IndexFile { std::vector funcs; std::vector vars; - // True if this file was loaded from cache. Not serialized. - bool is_loaded_from_cache_ = false; // Diagnostics found when indexing this file. Not serialized. NonElidedVector diagnostics_; // File contents at the time of index. Not serialized.