Merge pull request #280 from cargo-bins/signal-handling

Add Signal handling
This commit is contained in:
Jiahao XU 2022-08-06 20:13:03 +10:00 committed by GitHub
commit 132c5dfaa9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 147 additions and 35 deletions

View file

@ -218,23 +218,20 @@ fn main() -> MainExit {
let start = Instant::now();
let rt = Runtime::new().unwrap();
let handle = rt.spawn(entry(jobserver_client));
let result = rt.block_on(handle);
let handle = AutoAbortJoinHandle::new(rt.spawn(entry(jobserver_client)));
let result = rt.block_on(cancel_on_user_sig_term(handle));
drop(rt);
let done = start.elapsed();
debug!("run time: {done:?}");
result.map_or_else(
|join_err| MainExit::Error(BinstallError::from(join_err)),
|res| {
res.map(|_| MainExit::Success(done)).unwrap_or_else(|err| {
err.downcast::<BinstallError>()
.map(MainExit::Error)
.unwrap_or_else(MainExit::Report)
})
},
)
result.map_or_else(MainExit::Error, |res| {
res.map(|()| MainExit::Success(done)).unwrap_or_else(|err| {
err.downcast::<BinstallError>()
.map(MainExit::Error)
.unwrap_or_else(MainExit::Report)
})
})
}
async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
@ -361,7 +358,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
let tasks: Vec<_> = crate_names
.into_iter()
.map(|crate_name| {
tokio::spawn(binstall::resolve(
AutoAbortJoinHandle::spawn(binstall::resolve(
binstall_opts.clone(),
crate_name,
temp_dir_path.clone(),
@ -375,7 +372,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
// Confirm
let mut resolutions = Vec::with_capacity(tasks.len());
for task in tasks {
resolutions.push(await_task(task).await?);
resolutions.push(task.await??);
}
uithread.confirm().await?;
@ -384,7 +381,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
resolutions
.into_iter()
.map(|resolution| {
tokio::spawn(binstall::install(
AutoAbortJoinHandle::spawn(binstall::install(
resolution,
binstall_opts.clone(),
jobserver_client.clone(),
@ -403,7 +400,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
let crates_io_api_client = crates_io_api_client.clone();
let install_path = install_path.clone();
tokio::spawn(async move {
AutoAbortJoinHandle::spawn(async move {
let resolution = binstall::resolve(
opts.clone(),
crate_name,
@ -422,7 +419,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
let mut metadata_vec = Vec::with_capacity(tasks.len());
for task in tasks {
if let Some(metadata) = await_task(task).await? {
if let Some(metadata) = task.await?? {
metadata_vec.push(metadata);
}
}