summaryrefslogtreecommitdiff
path: root/cli/factory.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/factory.rs
parent76400149a49f44b734b5cacf438722bc3c07c1d1 (diff)
fix(compile): handle when DENO_DIR is readonly (#19257)
Closes #19253
Diffstat (limited to 'cli/factory.rs')
-rw-r--r--cli/factory.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/cli/factory.rs b/cli/factory.rs
index 3b171414f..8e20e5514 100644
--- a/cli/factory.rs
+++ b/cli/factory.rs
@@ -10,6 +10,7 @@ use crate::args::StorageKeyResolver;
use crate::args::TsConfigType;
use crate::cache::Caches;
use crate::cache::DenoDir;
+use crate::cache::DenoDirProvider;
use crate::cache::EmitCache;
use crate::cache::HttpCache;
use crate::cache::NodeAnalysisCache;
@@ -130,7 +131,7 @@ impl<T> Deferred<T> {
#[derive(Default)]
struct CliFactoryServices {
- dir: Deferred<DenoDir>,
+ deno_dir_provider: Deferred<Arc<DenoDirProvider>>,
caches: Deferred<Arc<Caches>>,
file_fetcher: Deferred<Arc<FileFetcher>>,
http_client: Deferred<Arc<HttpClient>>,
@@ -182,16 +183,21 @@ impl CliFactory {
&self.options
}
+ pub fn deno_dir_provider(&self) -> &Arc<DenoDirProvider> {
+ self.services.deno_dir_provider.get_or_init(|| {
+ Arc::new(DenoDirProvider::new(
+ self.options.maybe_custom_root().clone(),
+ ))
+ })
+ }
+
pub fn deno_dir(&self) -> Result<&DenoDir, AnyError> {
- self
- .services
- .dir
- .get_or_try_init(|| self.options.resolve_deno_dir())
+ Ok(self.deno_dir_provider().get_or_create()?)
}
pub fn caches(&self) -> Result<&Arc<Caches>, AnyError> {
self.services.caches.get_or_try_init(|| {
- let caches = Arc::new(Caches::new(self.deno_dir()?.clone()));
+ let caches = Arc::new(Caches::new(self.deno_dir_provider().clone()));
// Warm up the caches we know we'll likely need based on the CLI mode
match self.options.sub_command() {
DenoSubcommand::Run(_) => {