diff options
Diffstat (limited to 'cli/ops')
-rw-r--r-- | cli/ops/dispatch_flatbuffers.rs | 4 | ||||
-rw-r--r-- | cli/ops/mod.rs | 12 | ||||
-rw-r--r-- | cli/ops/os.rs | 128 |
3 files changed, 46 insertions, 98 deletions
diff --git a/cli/ops/dispatch_flatbuffers.rs b/cli/ops/dispatch_flatbuffers.rs index b9dd4d9fa..d9aa2fb83 100644 --- a/cli/ops/dispatch_flatbuffers.rs +++ b/cli/ops/dispatch_flatbuffers.rs @@ -17,7 +17,6 @@ use super::fs::{ }; use super::metrics::op_metrics; use super::net::{op_accept, op_dial, op_listen, op_shutdown}; -use super::os::{op_home_dir, op_set_env, op_start}; use super::performance::op_now; use super::permissions::{op_permissions, op_revoke_permission}; use super::process::{op_kill, op_run, op_run_status}; @@ -183,13 +182,10 @@ pub fn op_selector_std(inner_type: msg::Any) -> Option<CliDispatchFn> { msg::Any::Run => Some(op_run), msg::Any::RunStatus => Some(op_run_status), msg::Any::Seek => Some(op_seek), - msg::Any::SetEnv => Some(op_set_env), msg::Any::Shutdown => Some(op_shutdown), - msg::Any::Start => Some(op_start), msg::Any::Stat => Some(op_stat), msg::Any::Symlink => Some(op_symlink), msg::Any::Truncate => Some(op_truncate), - msg::Any::HomeDir => Some(op_home_dir), msg::Any::Write => Some(op_write), // TODO(ry) split these out so that only the appropriate Workers can access diff --git a/cli/ops/mod.rs b/cli/ops/mod.rs index 240132960..d945c5e5f 100644 --- a/cli/ops/mod.rs +++ b/cli/ops/mod.rs @@ -34,6 +34,9 @@ pub const OP_IS_TTY: OpId = 4; pub const OP_ENV: OpId = 5; pub const OP_EXEC_PATH: OpId = 6; pub const OP_UTIME: OpId = 7; +pub const OP_SET_ENV: OpId = 8; +pub const OP_HOME_DIR: OpId = 9; +pub const OP_START: OpId = 10; pub fn dispatch( state: &ThreadSafeState, @@ -59,9 +62,18 @@ pub fn dispatch( OP_EXEC_PATH => { dispatch_json::dispatch(os::op_exec_path, state, control, zero_copy) } + OP_HOME_DIR => { + dispatch_json::dispatch(os::op_home_dir, state, control, zero_copy) + } OP_UTIME => { dispatch_json::dispatch(fs::op_utime, state, control, zero_copy) } + OP_SET_ENV => { + dispatch_json::dispatch(os::op_set_env, state, control, zero_copy) + } + OP_START => { + dispatch_json::dispatch(os::op_start, state, control, zero_copy) + } OP_FLATBUFFER => dispatch_flatbuffers::dispatch(state, control, zero_copy), _ => panic!("bad op_id"), }; diff --git a/cli/ops/os.rs b/cli/ops/os.rs index 53ef63c60..afb87539f 100644 --- a/cli/ops/os.rs +++ b/cli/ops/os.rs @@ -1,15 +1,11 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -use super::dispatch_flatbuffers::serialize_response; use super::dispatch_json::{Deserialize, JsonOp, Value}; -use super::utils::*; use crate::ansi; use crate::fs as deno_fs; -use crate::msg; use crate::state::ThreadSafeState; use crate::version; use atty; use deno::*; -use flatbuffers::FlatBufferBuilder; use log; use std::collections::HashMap; use std::env; @@ -17,97 +13,38 @@ use url::Url; pub fn op_start( state: &ThreadSafeState, - base: &msg::Base<'_>, - data: Option<PinnedBuf>, -) -> CliOpResult { - assert!(data.is_none()); - let mut builder = FlatBufferBuilder::new(); - - let state = state; - let argv = state.argv.iter().map(String::as_str).collect::<Vec<_>>(); - let argv_off = builder.create_vector_of_strings(argv.as_slice()); - - let cwd_path = env::current_dir().unwrap(); - let cwd_off = - builder.create_string(deno_fs::normalize_path(cwd_path.as_ref()).as_ref()); - - let v8_version = version::v8(); - let v8_version_off = builder.create_string(v8_version); - - let deno_version = version::DENO; - let deno_version_off = builder.create_string(deno_version); - - let main_module = state - .main_module() - .map(|m| builder.create_string(&m.to_string())); - - let xeval_delim = state - .flags - .xeval_delim - .clone() - .map(|m| builder.create_string(&m)); - - let debug_flag = state - .flags - .log_level - .map_or(false, |l| l == log::Level::Debug); - - let inner = msg::StartRes::create( - &mut builder, - &msg::StartResArgs { - cwd: Some(cwd_off), - pid: std::process::id(), - argv: Some(argv_off), - main_module, - debug_flag, - version_flag: state.flags.version, - v8_version: Some(v8_version_off), - deno_version: Some(deno_version_off), - no_color: !ansi::use_color(), - xeval_delim, - ..Default::default() - }, - ); - - ok_buf(serialize_response( - base.cmd_id(), - &mut builder, - msg::BaseArgs { - inner_type: msg::Any::StartRes, - inner: Some(inner.as_union_value()), - ..Default::default() - }, - )) + _args: Value, + _zero_copy: Option<PinnedBuf>, +) -> Result<JsonOp, ErrBox> { + Ok(JsonOp::Sync(json!({ + "cwd": deno_fs::normalize_path(&env::current_dir().unwrap()), + "pid": std::process::id(), + "argv": state.argv, + "mainModule": state.main_module().map(|x| x.as_str().to_string()), + "debugFlag": state + .flags + .log_level + .map_or(false, |l| l == log::Level::Debug), + "versionFlag": state.flags.version, + "v8Version": version::v8(), + "denoVersion": version::DENO, + "noColor": !ansi::use_color(), + "xevalDelim": state.flags.xeval_delim.clone(), + }))) } pub fn op_home_dir( state: &ThreadSafeState, - base: &msg::Base<'_>, - data: Option<PinnedBuf>, -) -> CliOpResult { - assert!(data.is_none()); - let cmd_id = base.cmd_id(); - + _args: Value, + _zero_copy: Option<PinnedBuf>, +) -> Result<JsonOp, ErrBox> { state.check_env()?; - - let builder = &mut FlatBufferBuilder::new(); let path = dirs::home_dir() .unwrap_or_default() .into_os_string() .into_string() .unwrap_or_default(); - let path = Some(builder.create_string(&path)); - let inner = msg::HomeDirRes::create(builder, &msg::HomeDirResArgs { path }); - - ok_buf(serialize_response( - cmd_id, - builder, - msg::BaseArgs { - inner: Some(inner.as_union_value()), - inner_type: msg::Any::HomeDirRes, - ..Default::default() - }, - )) + Ok(JsonOp::Sync(json!(path))) } pub fn op_exec_path( @@ -124,18 +61,21 @@ pub fn op_exec_path( Ok(JsonOp::Sync(json!(path))) } +#[derive(Deserialize)] +struct SetEnv { + key: String, + value: String, +} + pub fn op_set_env( state: &ThreadSafeState, - base: &msg::Base<'_>, - data: Option<PinnedBuf>, -) -> CliOpResult { - assert!(data.is_none()); - let inner = base.inner_as_set_env().unwrap(); - let key = inner.key().unwrap(); - let value = inner.value().unwrap(); + args: Value, + _zero_copy: Option<PinnedBuf>, +) -> Result<JsonOp, ErrBox> { + let args: SetEnv = serde_json::from_value(args)?; state.check_env()?; - env::set_var(key, value); - ok_buf(empty_buf()) + env::set_var(args.key, args.value); + Ok(JsonOp::Sync(json!({}))) } pub fn op_env( |