summaryrefslogtreecommitdiff
path: root/cli/cache/caches.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-05-25 14:27:45 -0400
committerGitHub <noreply@github.com>2023-05-25 14:27:45 -0400
commit2ebd61ee1b09c8060c2da66890bf6ac024d97b67 (patch)
tree014c6d35e1f820811a2ff6dcb0e96c60f360de1f /cli/cache/caches.rs
parent76400149a49f44b734b5cacf438722bc3c07c1d1 (diff)
fix(compile): handle when DENO_DIR is readonly (#19257)
Closes #19253
Diffstat (limited to 'cli/cache/caches.rs')
-rw-r--r--cli/cache/caches.rs49
1 files changed, 38 insertions, 11 deletions
diff --git a/cli/cache/caches.rs b/cli/cache/caches.rs
index 62bec8a00..f630a82ff 100644
--- a/cli/cache/caches.rs
+++ b/cli/cache/caches.rs
@@ -1,19 +1,20 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
use std::path::PathBuf;
+use std::sync::Arc;
use once_cell::sync::OnceCell;
use super::cache_db::CacheDB;
use super::cache_db::CacheDBConfiguration;
use super::check::TYPE_CHECK_CACHE_DB;
+use super::deno_dir::DenoDirProvider;
use super::incremental::INCREMENTAL_CACHE_DB;
use super::node::NODE_ANALYSIS_CACHE_DB;
use super::parsed_source::PARSED_SOURCE_CACHE_DB;
-use super::DenoDir;
pub struct Caches {
- dir: DenoDir,
+ dir_provider: Arc<DenoDirProvider>,
fmt_incremental_cache_db: OnceCell<CacheDB>,
lint_incremental_cache_db: OnceCell<CacheDB>,
dep_analysis_db: OnceCell<CacheDB>,
@@ -22,9 +23,9 @@ pub struct Caches {
}
impl Caches {
- pub fn new(dir: DenoDir) -> Self {
+ pub fn new(dir: Arc<DenoDirProvider>) -> Self {
Self {
- dir,
+ dir_provider: dir,
fmt_incremental_cache_db: Default::default(),
lint_incremental_cache_db: Default::default(),
dep_analysis_db: Default::default(),
@@ -36,10 +37,16 @@ impl Caches {
fn make_db(
cell: &OnceCell<CacheDB>,
config: &'static CacheDBConfiguration,
- path: PathBuf,
+ path: Option<PathBuf>,
) -> CacheDB {
cell
- .get_or_init(|| CacheDB::from_path(config, path, crate::version::deno()))
+ .get_or_init(|| {
+ if let Some(path) = path {
+ CacheDB::from_path(config, path, crate::version::deno())
+ } else {
+ CacheDB::in_memory(config, crate::version::deno())
+ }
+ })
.clone()
}
@@ -47,7 +54,11 @@ impl Caches {
Self::make_db(
&self.fmt_incremental_cache_db,
&INCREMENTAL_CACHE_DB,
- self.dir.fmt_incremental_cache_db_file_path(),
+ self
+ .dir_provider
+ .get_or_create()
+ .ok()
+ .map(|dir| dir.fmt_incremental_cache_db_file_path()),
)
}
@@ -55,7 +66,11 @@ impl Caches {
Self::make_db(
&self.lint_incremental_cache_db,
&INCREMENTAL_CACHE_DB,
- self.dir.lint_incremental_cache_db_file_path(),
+ self
+ .dir_provider
+ .get_or_create()
+ .ok()
+ .map(|dir| dir.lint_incremental_cache_db_file_path()),
)
}
@@ -63,7 +78,11 @@ impl Caches {
Self::make_db(
&self.dep_analysis_db,
&PARSED_SOURCE_CACHE_DB,
- self.dir.dep_analysis_db_file_path(),
+ self
+ .dir_provider
+ .get_or_create()
+ .ok()
+ .map(|dir| dir.dep_analysis_db_file_path()),
)
}
@@ -71,7 +90,11 @@ impl Caches {
Self::make_db(
&self.node_analysis_db,
&NODE_ANALYSIS_CACHE_DB,
- self.dir.node_analysis_db_file_path(),
+ self
+ .dir_provider
+ .get_or_create()
+ .ok()
+ .map(|dir| dir.node_analysis_db_file_path()),
)
}
@@ -79,7 +102,11 @@ impl Caches {
Self::make_db(
&self.type_checking_cache_db,
&TYPE_CHECK_CACHE_DB,
- self.dir.type_checking_cache_db_file_path(),
+ self
+ .dir_provider
+ .get_or_create()
+ .ok()
+ .map(|dir| dir.type_checking_cache_db_file_path()),
)
}
}