summaryrefslogtreecommitdiff
path: root/cli/tools/run.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-01-07 17:25:34 +0100
committerGitHub <noreply@github.com>2023-01-07 17:25:34 +0100
commitfac64478157ee563b185edb5734688e4523df3a1 (patch)
tree888d562982e1fc37dfb9a4459928bcec84d55dfc /cli/tools/run.rs
parent82e930726ee5dbac8e6eae0962c07c72daf9843c (diff)
refactor(permissions): add PermissionsContainer struct for internal mutability (#17134)
Turns out we were cloning permissions which after prompting were discarded, so the state of permissions was never preserved. To handle that we need to store all permissions behind "Arc<Mutex<>>" (because there are situations where we need to send them to other thread). Testing and benching code still uses "Permissions" in most places - it's undesirable to share the same permission set between various test/bench files - otherwise granting or revoking permissions in one file would influence behavior of other test files.
Diffstat (limited to 'cli/tools/run.rs')
-rw-r--r--cli/tools/run.rs20
1 files changed, 13 insertions, 7 deletions
diff --git a/cli/tools/run.rs b/cli/tools/run.rs
index af982e483..3830affed 100644
--- a/cli/tools/run.rs
+++ b/cli/tools/run.rs
@@ -9,6 +9,7 @@ use deno_ast::ModuleSpecifier;
use deno_core::error::AnyError;
use deno_core::resolve_url_or_path;
use deno_runtime::permissions::Permissions;
+use deno_runtime::permissions::PermissionsContainer;
use crate::args::EvalFlags;
use crate::args::Flags;
@@ -56,8 +57,9 @@ To grant permissions, set them before the script argument. For example:
} else {
resolve_url_or_path(&run_flags.script)?
};
- let permissions =
- Permissions::from_options(&ps.options.permissions_options())?;
+ let permissions = PermissionsContainer::new(Permissions::from_options(
+ &ps.options.permissions_options(),
+ )?);
let mut worker =
create_main_worker(&ps, main_module.clone(), permissions).await?;
@@ -71,7 +73,9 @@ pub async fn run_from_stdin(flags: Flags) -> Result<i32, AnyError> {
let mut worker = create_main_worker(
&ps.clone(),
main_module.clone(),
- Permissions::from_options(&ps.options.permissions_options())?,
+ PermissionsContainer::new(Permissions::from_options(
+ &ps.options.permissions_options(),
+ )?),
)
.await?;
@@ -110,8 +114,9 @@ async fn run_with_watch(flags: Flags, script: String) -> Result<i32, AnyError> {
let ps =
ProcState::build_for_file_watcher((*flags).clone(), sender.clone())
.await?;
- let permissions =
- Permissions::from_options(&ps.options.permissions_options())?;
+ let permissions = PermissionsContainer::new(Permissions::from_options(
+ &ps.options.permissions_options(),
+ )?);
let worker =
create_main_worker(&ps, main_module.clone(), permissions).await?;
worker.run_for_watcher().await?;
@@ -143,8 +148,9 @@ pub async fn eval_command(
let main_module =
resolve_url_or_path(&format!("./$deno$eval.{}", eval_flags.ext))?;
let ps = ProcState::build(flags).await?;
- let permissions =
- Permissions::from_options(&ps.options.permissions_options())?;
+ let permissions = PermissionsContainer::new(Permissions::from_options(
+ &ps.options.permissions_options(),
+ )?);
let mut worker =
create_main_worker(&ps, main_module.clone(), permissions).await?;
// Create a dummy source file.