[Updated] D8448: rust-chg: modernize entry function
yuja (Yuya Nishihara)
phabricator at mercurial-scm.org
Thu Apr 23 18:04:17 UTC 2020
Closed by commit rHG9fc9526e283a: rust-chg: modernize entry function (authored by yuja).
This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state "Needs Review".
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D8448?vs=21125&id=21192
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D8448/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D8448
AFFECTED FILES
rust/chg/Cargo.toml
rust/chg/src/main.rs
CHANGE DETAILS
diff --git a/rust/chg/src/main.rs b/rust/chg/src/main.rs
--- a/rust/chg/src/main.rs
+++ b/rust/chg/src/main.rs
@@ -5,13 +5,12 @@
use chg::locator::{self, Locator};
use chg::procutil;
-use chg::{ChgClientExt, ChgUiHandler};
-use futures::sync::oneshot;
+use chg::ChgUiHandler;
use std::env;
use std::io;
+use std::io::Write;
use std::process;
use std::time::Instant;
-use tokio::prelude::*;
struct DebugLogger {
start: Instant,
@@ -67,31 +66,22 @@
process::exit(code);
}
-fn run(umask: u32) -> io::Result<i32> {
+#[tokio::main]
+async fn run(umask: u32) -> io::Result<i32> {
let mut loc = Locator::prepare_from_env()?;
loc.set_early_args(locator::collect_early_args(env::args_os().skip(1)));
- let handler = ChgUiHandler::new();
- let (result_tx, result_rx) = oneshot::channel();
- let fut = loc
- .connect()
- .and_then(|(_, client)| client.attach_io(io::stdin(), io::stdout(), io::stderr()))
- .and_then(move |client| client.set_umask(umask))
- .and_then(|client| {
- let pid = client.server_spec().process_id.unwrap();
- let pgid = client.server_spec().process_group_id;
- procutil::setup_signal_handler_once(pid, pgid)?;
- Ok(client)
- })
- .and_then(|client| client.run_command_chg(handler, env::args_os().skip(1)))
- .map(|(_client, _handler, code)| {
- procutil::restore_signal_handler_once()?;
- Ok(code)
- })
- .or_else(|err| Ok(Err(err))) // pass back error to caller
- .map(|res| result_tx.send(res).unwrap());
- tokio::run(fut);
- result_rx.wait().unwrap_or(Err(io::Error::new(
- io::ErrorKind::Other,
- "no exit code set",
- )))
+ let mut handler = ChgUiHandler::new();
+ let mut client = loc.connect().await?;
+ client
+ .attach_io(&io::stdin(), &io::stdout(), &io::stderr())
+ .await?;
+ client.set_umask(umask).await?;
+ let pid = client.server_spec().process_id.unwrap();
+ let pgid = client.server_spec().process_group_id;
+ procutil::setup_signal_handler_once(pid, pgid)?;
+ let code = client
+ .run_command_chg(&mut handler, env::args_os().skip(1))
+ .await?;
+ procutil::restore_signal_handler_once()?;
+ Ok(code)
}
diff --git a/rust/chg/Cargo.toml b/rust/chg/Cargo.toml
--- a/rust/chg/Cargo.toml
+++ b/rust/chg/Cargo.toml
@@ -6,9 +6,6 @@
license = "GPL-2.0+"
edition = "2018"
-# TODO: enable auto discovery
-autobins = false
-
[dependencies]
async-trait = "0.1"
bytes = "0.5"
To: yuja, #hg-reviewers, Alphare
Cc: marmoute, mercurial-patches, durin42, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20200423/59b20a12/attachment-0001.html>
More information about the Mercurial-patches
mailing list