diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2023-01-10 15:28:10 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-10 16:28:10 +0100 |
commit | 71ea4ef2746d7d75623a821d4832d3531a8e1654 (patch) | |
tree | 7d5d9676c5de9b32edcc2aee9a94394e4de2a19f /cli/tools | |
parent | 0329bc69dabbcc4d57ff9d34d695ffd4ddb1de4f (diff) |
fix(watch): preserve `ProcState::file_fetcher` between restarts (#15466)
This commit changes "ProcState" to store "file_fetcher" field in an "Arc",
allowing it to be preserved between restarts and thus keeping the state
alive between the restarts. File watchers for "deno test" and "deno bench"
now reset "ProcState" between restarts.
Diffstat (limited to 'cli/tools')
-rw-r--r-- | cli/tools/bench.rs | 12 | ||||
-rw-r--r-- | cli/tools/run.rs | 16 | ||||
-rw-r--r-- | cli/tools/test.rs | 13 |
3 files changed, 22 insertions, 19 deletions
diff --git a/cli/tools/bench.rs b/cli/tools/bench.rs index ed788fa7f..ad5841e39 100644 --- a/cli/tools/bench.rs +++ b/cli/tools/bench.rs @@ -32,6 +32,7 @@ use indexmap::IndexMap; use log::Level; use serde::Deserialize; use serde::Serialize; +use std::cell::RefCell; use std::collections::HashSet; use std::path::Path; use std::path::PathBuf; @@ -339,7 +340,6 @@ async fn check_specifiers( lib, PermissionsContainer::allow_all(), PermissionsContainer::new(permissions), - true, ) .await?; @@ -538,13 +538,15 @@ pub async fn run_benchmarks_with_watch( .collect(); let no_check = ps.options.type_check_mode() == TypeCheckMode::None; + let ps = RefCell::new(ps); + let resolver = |changed: Option<Vec<PathBuf>>| { let paths_to_watch = paths_to_watch.clone(); let paths_to_watch_clone = paths_to_watch.clone(); let files_changed = changed.is_some(); let files = bench_options.files.clone(); - let ps = ps.clone(); + let ps = ps.borrow().clone(); async move { let bench_modules = collect_specifiers(&files, is_supported_bench_path)?; @@ -656,7 +658,8 @@ pub async fn run_benchmarks_with_watch( let operation = |modules_to_reload: Vec<(ModuleSpecifier, ModuleKind)>| { let permissions = permissions.clone(); - let ps = ps.clone(); + ps.borrow_mut().reset_for_file_watcher(); + let ps = ps.borrow().clone(); let filter = bench_options.filter.clone(); let files = bench_options.files.clone(); @@ -681,12 +684,13 @@ pub async fn run_benchmarks_with_watch( } }; + let clear_screen = !ps.borrow().options.no_clear_screen(); file_watcher::watch_func( resolver, operation, file_watcher::PrintConfig { job_name: "Bench".to_string(), - clear_screen: !ps.options.no_clear_screen(), + clear_screen, }, ) .await?; diff --git a/cli/tools/run.rs b/cli/tools/run.rs index 3830affed..a022a5059 100644 --- a/cli/tools/run.rs +++ b/cli/tools/run.rs @@ -1,7 +1,6 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. use std::io::Read; -use std::path::PathBuf; use std::sync::Arc; use deno_ast::MediaType; @@ -104,16 +103,13 @@ async fn run_with_watch(flags: Flags, script: String) -> Result<i32, AnyError> { let flags = Arc::new(flags); let main_module = resolve_url_or_path(&script)?; let (sender, receiver) = tokio::sync::mpsc::unbounded_channel(); + let mut ps = + ProcState::build_for_file_watcher((*flags).clone(), sender.clone()).await?; - let operation = |(sender, main_module): ( - tokio::sync::mpsc::UnboundedSender<Vec<PathBuf>>, - ModuleSpecifier, - )| { - let flags = flags.clone(); + let operation = |main_module: ModuleSpecifier| { + ps.reset_for_file_watcher(); + let ps = ps.clone(); Ok(async move { - let ps = - ProcState::build_for_file_watcher((*flags).clone(), sender.clone()) - .await?; let permissions = PermissionsContainer::new(Permissions::from_options( &ps.options.permissions_options(), )?); @@ -128,7 +124,7 @@ async fn run_with_watch(flags: Flags, script: String) -> Result<i32, AnyError> { util::file_watcher::watch_func2( receiver, operation, - (sender, main_module), + main_module, util::file_watcher::PrintConfig { job_name: "Process".to_string(), clear_screen: !flags.no_clear_screen, diff --git a/cli/tools/test.rs b/cli/tools/test.rs index 4cac8a404..548ae2801 100644 --- a/cli/tools/test.rs +++ b/cli/tools/test.rs @@ -46,6 +46,7 @@ use rand::seq::SliceRandom; use rand::SeedableRng; use regex::Regex; use serde::Deserialize; +use std::cell::RefCell; use std::collections::BTreeMap; use std::collections::HashSet; use std::fmt::Write as _; @@ -957,7 +958,6 @@ pub async fn check_specifiers( lib, PermissionsContainer::new(Permissions::allow_all()), PermissionsContainer::new(permissions.clone()), - false, ) .await?; } @@ -979,7 +979,6 @@ pub async fn check_specifiers( lib, PermissionsContainer::allow_all(), PermissionsContainer::new(permissions), - true, ) .await?; @@ -1355,12 +1354,14 @@ pub async fn run_tests_with_watch( let no_check = ps.options.type_check_mode() == TypeCheckMode::None; let test_options = &test_options; + let ps = RefCell::new(ps); + let resolver = |changed: Option<Vec<PathBuf>>| { let paths_to_watch = paths_to_watch.clone(); let paths_to_watch_clone = paths_to_watch.clone(); let files_changed = changed.is_some(); - let ps = ps.clone(); + let ps = ps.borrow().clone(); async move { let test_modules = if test_options.doc { @@ -1477,7 +1478,8 @@ pub async fn run_tests_with_watch( let operation = |modules_to_reload: Vec<(ModuleSpecifier, ModuleKind)>| { let permissions = permissions.clone(); - let ps = ps.clone(); + ps.borrow_mut().reset_for_file_watcher(); + let ps = ps.borrow().clone(); let test_options = test_options.clone(); async move { @@ -1517,12 +1519,13 @@ pub async fn run_tests_with_watch( } }; + let clear_screen = !ps.borrow().options.no_clear_screen(); file_watcher::watch_func( resolver, operation, file_watcher::PrintConfig { job_name: "Test".to_string(), - clear_screen: !ps.options.no_clear_screen(), + clear_screen, }, ) .await?; |