mirror of
https://github.com/cargo-bins/cargo-binstall.git
synced 2025-05-09 05:20:03 +00:00
Merge pull request #280 from cargo-bins/signal-handling
Add Signal handling
This commit is contained in:
commit
132c5dfaa9
10 changed files with 147 additions and 35 deletions
31
src/main.rs
31
src/main.rs
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue