summaryrefslogtreecommitdiff
path: root/cli/ops/process.rs
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2020-09-06 02:34:02 +0200
committerGitHub <noreply@github.com>2020-09-06 02:34:02 +0200
commitc821e8f2f1fb8ad5e9eb00854277cafc8c80b2f5 (patch)
treec429a3c2707a4047fb512443a8468b7e15e5730d /cli/ops/process.rs
parent849431eb1d112d1f79f4a327830dc1a5bf22dd47 (diff)
Move JSON ops to deno_core (#7336)
Diffstat (limited to 'cli/ops/process.rs')
-rw-r--r--cli/ops/process.rs47
1 files changed, 21 insertions, 26 deletions
diff --git a/cli/ops/process.rs b/cli/ops/process.rs
index 836db08cd..fb8675db9 100644
--- a/cli/ops/process.rs
+++ b/cli/ops/process.rs
@@ -1,35 +1,30 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-use super::dispatch_json::{Deserialize, Value};
+
use super::io::{std_file_resource, StreamResource, StreamResourceHolder};
use crate::signal::kill;
use crate::state::State;
use deno_core::BufVec;
-use deno_core::CoreIsolate;
use deno_core::ErrBox;
-use deno_core::ResourceTable;
+use deno_core::OpRegistry;
use deno_core::ZeroCopyBuf;
use futures::future::poll_fn;
use futures::future::FutureExt;
-use std::cell::RefCell;
+use serde_derive::Deserialize;
+use serde_json::Value;
use std::rc::Rc;
use tokio::process::Command;
#[cfg(unix)]
use std::os::unix::process::ExitStatusExt;
-pub fn init(i: &mut CoreIsolate, s: &Rc<State>) {
- let t = &CoreIsolate::state(i).borrow().resource_table.clone();
-
- i.register_op("op_run", s.stateful_json_op_sync(t, op_run));
- i.register_op("op_run_status", s.stateful_json_op_async(t, op_run_status));
- i.register_op("op_kill", s.stateful_json_op_sync(t, op_kill));
+pub fn init(s: &Rc<State>) {
+ s.register_op_json_sync("op_run", op_run);
+ s.register_op_json_async("op_run_status", op_run_status);
+ s.register_op_json_sync("op_kill", op_kill);
}
-fn clone_file(
- rid: u32,
- resource_table: &mut ResourceTable,
-) -> Result<std::fs::File, ErrBox> {
- std_file_resource(resource_table, rid, move |r| match r {
+fn clone_file(state: &State, rid: u32) -> Result<std::fs::File, ErrBox> {
+ std_file_resource(state, rid, move |r| match r {
Ok(std_file) => std_file.try_clone().map_err(ErrBox::from),
Err(_) => Err(ErrBox::bad_resource_id()),
})
@@ -64,7 +59,6 @@ struct ChildResource {
fn op_run(
state: &State,
- resource_table: &mut ResourceTable,
args: Value,
_zero_copy: &mut [ZeroCopyBuf],
) -> Result<Value, ErrBox> {
@@ -90,21 +84,21 @@ fn op_run(
if run_args.stdin != "" {
c.stdin(subprocess_stdio_map(run_args.stdin.as_ref())?);
} else {
- let file = clone_file(run_args.stdin_rid, resource_table)?;
+ let file = clone_file(state, run_args.stdin_rid)?;
c.stdin(file);
}
if run_args.stdout != "" {
c.stdout(subprocess_stdio_map(run_args.stdout.as_ref())?);
} else {
- let file = clone_file(run_args.stdout_rid, resource_table)?;
+ let file = clone_file(state, run_args.stdout_rid)?;
c.stdout(file);
}
if run_args.stderr != "" {
c.stderr(subprocess_stdio_map(run_args.stderr.as_ref())?);
} else {
- let file = clone_file(run_args.stderr_rid, resource_table)?;
+ let file = clone_file(state, run_args.stderr_rid)?;
c.stderr(file);
}
@@ -117,7 +111,7 @@ fn op_run(
let stdin_rid = match child.stdin.take() {
Some(child_stdin) => {
- let rid = resource_table.add(
+ let rid = state.resource_table.borrow_mut().add(
"childStdin",
Box::new(StreamResourceHolder::new(StreamResource::ChildStdin(
child_stdin,
@@ -130,7 +124,7 @@ fn op_run(
let stdout_rid = match child.stdout.take() {
Some(child_stdout) => {
- let rid = resource_table.add(
+ let rid = state.resource_table.borrow_mut().add(
"childStdout",
Box::new(StreamResourceHolder::new(StreamResource::ChildStdout(
child_stdout,
@@ -143,7 +137,7 @@ fn op_run(
let stderr_rid = match child.stderr.take() {
Some(child_stderr) => {
- let rid = resource_table.add(
+ let rid = state.resource_table.borrow_mut().add(
"childStderr",
Box::new(StreamResourceHolder::new(StreamResource::ChildStderr(
child_stderr,
@@ -155,7 +149,10 @@ fn op_run(
};
let child_resource = ChildResource { child };
- let child_rid = resource_table.add("child", Box::new(child_resource));
+ let child_rid = state
+ .resource_table
+ .borrow_mut()
+ .add("child", Box::new(child_resource));
Ok(json!({
"rid": child_rid,
@@ -174,7 +171,6 @@ struct RunStatusArgs {
async fn op_run_status(
state: Rc<State>,
- resource_table: Rc<RefCell<ResourceTable>>,
args: Value,
_zero_copy: BufVec,
) -> Result<Value, ErrBox> {
@@ -184,7 +180,7 @@ async fn op_run_status(
state.check_run()?;
let run_status = poll_fn(|cx| {
- let mut resource_table = resource_table.borrow_mut();
+ let mut resource_table = state.resource_table.borrow_mut();
let child_resource = resource_table
.get_mut::<ChildResource>(rid)
.ok_or_else(ErrBox::bad_resource_id)?;
@@ -220,7 +216,6 @@ struct KillArgs {
fn op_kill(
state: &State,
- _resource_table: &mut ResourceTable,
args: Value,
_zero_copy: &mut [ZeroCopyBuf],
) -> Result<Value, ErrBox> {