1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-10 08:09:06 -05:00

refactor: make IncrementalCache accept a CacheDBHash (#27570)

This commit is contained in:
Bartek Iwańczuk 2025-01-06 23:56:36 +00:00 committed by GitHub
parent 6750aa61eb
commit b6f2646c1c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 22 additions and 17 deletions

View file

@ -25,12 +25,12 @@ impl CacheDBHash {
Self(hash) Self(hash)
} }
pub fn from_source(source: impl std::hash::Hash) -> Self { pub fn from_hashable(hashable: impl std::hash::Hash) -> Self {
Self::new( Self::new(
// always write in the deno version just in case // always write in the deno version just in case
// the clearing on deno version change doesn't work // the clearing on deno version change doesn't work
FastInsecureHasher::new_deno_versioned() FastInsecureHasher::new_deno_versioned()
.write_hashable(source) .write_hashable(hashable)
.finish(), .finish(),
) )
} }

View file

@ -34,12 +34,16 @@ pub static INCREMENTAL_CACHE_DB: CacheDBConfiguration = CacheDBConfiguration {
pub struct IncrementalCache(IncrementalCacheInner); pub struct IncrementalCache(IncrementalCacheInner);
impl IncrementalCache { impl IncrementalCache {
pub fn new<TState: std::hash::Hash>( pub fn new(
db: CacheDB, db: CacheDB,
state: &TState, state_hash: CacheDBHash,
initial_file_paths: &[PathBuf], initial_file_paths: &[PathBuf],
) -> Self { ) -> Self {
IncrementalCache(IncrementalCacheInner::new(db, state, initial_file_paths)) IncrementalCache(IncrementalCacheInner::new(
db,
state_hash,
initial_file_paths,
))
} }
pub fn is_file_same(&self, file_path: &Path, file_text: &str) -> bool { pub fn is_file_same(&self, file_path: &Path, file_text: &str) -> bool {
@ -67,12 +71,11 @@ struct IncrementalCacheInner {
} }
impl IncrementalCacheInner { impl IncrementalCacheInner {
pub fn new<TState: std::hash::Hash>( pub fn new(
db: CacheDB, db: CacheDB,
state: &TState, state_hash: CacheDBHash,
initial_file_paths: &[PathBuf], initial_file_paths: &[PathBuf],
) -> Self { ) -> Self {
let state_hash = CacheDBHash::from_source(state);
let sql_cache = SqlIncrementalCache::new(db, state_hash); let sql_cache = SqlIncrementalCache::new(db, state_hash);
Self::from_sql_incremental_cache(sql_cache, initial_file_paths) Self::from_sql_incremental_cache(sql_cache, initial_file_paths)
} }
@ -112,13 +115,13 @@ impl IncrementalCacheInner {
pub fn is_file_same(&self, file_path: &Path, file_text: &str) -> bool { pub fn is_file_same(&self, file_path: &Path, file_text: &str) -> bool {
match self.previous_hashes.get(file_path) { match self.previous_hashes.get(file_path) {
Some(hash) => *hash == CacheDBHash::from_source(file_text), Some(hash) => *hash == CacheDBHash::from_hashable(file_text),
None => false, None => false,
} }
} }
pub fn update_file(&self, file_path: &Path, file_text: &str) { pub fn update_file(&self, file_path: &Path, file_text: &str) {
let hash = CacheDBHash::from_source(file_text); let hash = CacheDBHash::from_hashable(file_text);
if let Some(previous_hash) = self.previous_hashes.get(file_path) { if let Some(previous_hash) = self.previous_hashes.get(file_path) {
if *previous_hash == hash { if *previous_hash == hash {
return; // do not bother updating the db file because nothing has changed return; // do not bother updating the db file because nothing has changed
@ -262,7 +265,7 @@ mod test {
let sql_cache = SqlIncrementalCache::new(conn, CacheDBHash::new(1)); let sql_cache = SqlIncrementalCache::new(conn, CacheDBHash::new(1));
let file_path = PathBuf::from("/mod.ts"); let file_path = PathBuf::from("/mod.ts");
let file_text = "test"; let file_text = "test";
let file_hash = CacheDBHash::from_source(file_text); let file_hash = CacheDBHash::from_hashable(file_text);
sql_cache.set_source_hash(&file_path, file_hash).unwrap(); sql_cache.set_source_hash(&file_path, file_hash).unwrap();
let cache = IncrementalCacheInner::from_sql_incremental_cache( let cache = IncrementalCacheInner::from_sql_incremental_cache(
sql_cache, sql_cache,

2
cli/cache/mod.rs vendored
View file

@ -298,7 +298,7 @@ impl Loader for FetchCacher {
module_info: &deno_graph::ModuleInfo, module_info: &deno_graph::ModuleInfo,
) { ) {
log::debug!("Caching module info for {}", specifier); log::debug!("Caching module info for {}", specifier);
let source_hash = CacheDBHash::from_source(source); let source_hash = CacheDBHash::from_hashable(source);
let result = self.module_info_cache.set_module_info( let result = self.module_info_cache.set_module_info(
specifier, specifier,
media_type, media_type,

View file

@ -194,7 +194,7 @@ impl<'a> ModuleInfoCacheModuleAnalyzer<'a> {
source: &Arc<str>, source: &Arc<str>,
) -> Result<ModuleInfo, deno_ast::ParseDiagnostic> { ) -> Result<ModuleInfo, deno_ast::ParseDiagnostic> {
// attempt to load from the cache // attempt to load from the cache
let source_hash = CacheDBHash::from_source(source); let source_hash = CacheDBHash::from_hashable(source);
if let Some(info) = if let Some(info) =
self.load_cached_module_info(specifier, media_type, source_hash) self.load_cached_module_info(specifier, media_type, source_hash)
{ {
@ -228,7 +228,7 @@ impl<'a> deno_graph::ModuleAnalyzer for ModuleInfoCacheModuleAnalyzer<'a> {
media_type: MediaType, media_type: MediaType,
) -> Result<ModuleInfo, deno_ast::ParseDiagnostic> { ) -> Result<ModuleInfo, deno_ast::ParseDiagnostic> {
// attempt to load from the cache // attempt to load from the cache
let source_hash = CacheDBHash::from_source(&source); let source_hash = CacheDBHash::from_hashable(&source);
if let Some(info) = if let Some(info) =
self.load_cached_module_info(specifier, media_type, source_hash) self.load_cached_module_info(specifier, media_type, source_hash)
{ {

View file

@ -68,7 +68,7 @@ impl CliCjsCodeAnalyzer {
specifier: &ModuleSpecifier, specifier: &ModuleSpecifier,
source: &str, source: &str,
) -> Result<CliCjsAnalysis, AnyError> { ) -> Result<CliCjsAnalysis, AnyError> {
let source_hash = CacheDBHash::from_source(source); let source_hash = CacheDBHash::from_hashable(source);
if let Some(analysis) = if let Some(analysis) =
self.cache.get_cjs_analysis(specifier.as_str(), source_hash) self.cache.get_cjs_analysis(specifier.as_str(), source_hash)
{ {

View file

@ -43,6 +43,7 @@ use crate::args::FmtOptions;
use crate::args::FmtOptionsConfig; use crate::args::FmtOptionsConfig;
use crate::args::ProseWrap; use crate::args::ProseWrap;
use crate::args::UnstableFmtOptions; use crate::args::UnstableFmtOptions;
use crate::cache::CacheDBHash;
use crate::cache::Caches; use crate::cache::Caches;
use crate::cache::IncrementalCache; use crate::cache::IncrementalCache;
use crate::colors; use crate::colors;
@ -202,7 +203,7 @@ async fn format_files(
let paths = paths_with_options.paths; let paths = paths_with_options.paths;
let incremental_cache = Arc::new(IncrementalCache::new( let incremental_cache = Arc::new(IncrementalCache::new(
caches.fmt_incremental_cache_db(), caches.fmt_incremental_cache_db(),
&(&fmt_options.options, &fmt_options.unstable), // cache key CacheDBHash::from_hashable((&fmt_options.options, &fmt_options.unstable)),
&paths, &paths,
)); ));
formatter formatter

View file

@ -39,6 +39,7 @@ use crate::args::Flags;
use crate::args::LintFlags; use crate::args::LintFlags;
use crate::args::LintOptions; use crate::args::LintOptions;
use crate::args::WorkspaceLintOptions; use crate::args::WorkspaceLintOptions;
use crate::cache::CacheDBHash;
use crate::cache::Caches; use crate::cache::Caches;
use crate::cache::IncrementalCache; use crate::cache::IncrementalCache;
use crate::colors; use crate::colors;
@ -291,7 +292,7 @@ impl WorkspaceLinter {
lint_rules.incremental_cache_state().map(|state| { lint_rules.incremental_cache_state().map(|state| {
Arc::new(IncrementalCache::new( Arc::new(IncrementalCache::new(
self.caches.lint_incremental_cache_db(), self.caches.lint_incremental_cache_db(),
&state, CacheDBHash::from_hashable(&state),
&paths, &paths,
)) ))
}); });