diff options
Diffstat (limited to 'cli/flags.rs')
| -rw-r--r-- | cli/flags.rs | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/cli/flags.rs b/cli/flags.rs index f2a3ffc36..4766fbe5f 100644 --- a/cli/flags.rs +++ b/cli/flags.rs @@ -1,4 +1,5 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. +use crate::fs::resolve_from_cwd; use clap::App; use clap::AppSettings; use clap::Arg; @@ -392,6 +393,20 @@ fn lock_args_parse(flags: &mut DenoFlags, matches: &clap::ArgMatches) { } } +fn resolve_fs_whitelist(whitelist: &[String]) -> Vec<String> { + whitelist + .iter() + .map(|raw_path| { + resolve_from_cwd(&raw_path) + .unwrap() + .0 + .to_str() + .unwrap() + .to_owned() + }) + .collect::<Vec<_>>() +} + // Shared between the run and test subcommands. They both take similar options. fn run_test_args_parse(flags: &mut DenoFlags, matches: &clap::ArgMatches) { reload_arg_parse(flags, matches); @@ -406,7 +421,7 @@ fn run_test_args_parse(flags: &mut DenoFlags, matches: &clap::ArgMatches) { let read_wl = matches.values_of("allow-read").unwrap(); let raw_read_whitelist: Vec<String> = read_wl.map(std::string::ToString::to_string).collect(); - flags.read_whitelist = raw_read_whitelist; + flags.read_whitelist = resolve_fs_whitelist(&raw_read_whitelist); debug!("read whitelist: {:#?}", &flags.read_whitelist); } else { flags.allow_read = true; @@ -415,9 +430,10 @@ fn run_test_args_parse(flags: &mut DenoFlags, matches: &clap::ArgMatches) { if matches.is_present("allow-write") { if matches.value_of("allow-write").is_some() { let write_wl = matches.values_of("allow-write").unwrap(); - let raw_write_whitelist = + let raw_write_whitelist: Vec<String> = write_wl.map(std::string::ToString::to_string).collect(); - flags.write_whitelist = raw_write_whitelist; + flags.write_whitelist = + resolve_fs_whitelist(raw_write_whitelist.as_slice()); debug!("write whitelist: {:#?}", &flags.write_whitelist); } else { flags.allow_write = true; @@ -1223,6 +1239,7 @@ fn arg_hacks(mut args: Vec<String>) -> Vec<String> { #[cfg(test)] mod tests { use super::*; + use std::env::current_dir; #[test] fn arg_hacks_test() { @@ -1561,14 +1578,17 @@ mod tests { let r = flags_from_vec_safe(svec![ "deno", "run", - format!("--allow-read={}", &temp_dir_path), + format!("--allow-read=.,{}", &temp_dir_path), "script.ts" ]); assert_eq!( r.unwrap(), DenoFlags { allow_read: false, - read_whitelist: svec![&temp_dir_path], + read_whitelist: svec![ + current_dir().unwrap().to_str().unwrap().to_owned(), + &temp_dir_path + ], argv: svec!["deno", "script.ts"], subcommand: DenoSubcommand::Run, ..DenoFlags::default() @@ -1585,14 +1605,17 @@ mod tests { let r = flags_from_vec_safe(svec![ "deno", "run", - format!("--allow-write={}", &temp_dir_path), + format!("--allow-write=.,{}", &temp_dir_path), "script.ts" ]); assert_eq!( r.unwrap(), DenoFlags { allow_write: false, - write_whitelist: svec![&temp_dir_path], + write_whitelist: svec![ + current_dir().unwrap().to_str().unwrap().to_owned(), + &temp_dir_path + ], argv: svec!["deno", "script.ts"], subcommand: DenoSubcommand::Run, ..DenoFlags::default() |
