mirror of
https://github.com/nushell/nushell.git
synced 2025-08-17 11:51:46 +02:00
Move job errors into ShellError::Job
variant (#15820)
- related #10698 # Description In my endeavor to make the `ShellError` less crowded I moved the job related errors into `ShellError::Job` with a `JobError` enum. Mostly I just moved the codes, errors and labels over to the new enum.
This commit is contained in:
@ -34,21 +34,13 @@ impl Command for JobKill {
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let head = call.head;
|
||||
|
||||
let id_arg: Spanned<i64> = call.req(engine_state, stack, 0)?;
|
||||
|
||||
if id_arg.item < 0 {
|
||||
return Err(ShellError::NeedsPositiveValue { span: id_arg.span });
|
||||
}
|
||||
|
||||
let id: JobId = JobId::new(id_arg.item as usize);
|
||||
let id_arg: Spanned<usize> = call.req(engine_state, stack, 0)?;
|
||||
let id = JobId::new(id_arg.item);
|
||||
|
||||
let mut jobs = engine_state.jobs.lock().expect("jobs lock is poisoned!");
|
||||
|
||||
if jobs.lookup(id).is_none() {
|
||||
return Err(ShellError::JobNotFound {
|
||||
id: id.get(),
|
||||
span: head,
|
||||
});
|
||||
return Err(JobError::NotFound { span: head, id }.into());
|
||||
}
|
||||
|
||||
jobs.kill_and_remove(id).map_err(|err| {
|
||||
|
@ -145,7 +145,7 @@ fn recv_instantly(
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
match mailbox.try_recv(tag) {
|
||||
Ok(value) => Ok(value),
|
||||
Err(TryRecvError::Empty) => Err(ShellError::RecvTimeout { span }),
|
||||
Err(TryRecvError::Empty) => Err(JobError::RecvTimeout { span }.into()),
|
||||
Err(TryRecvError::Disconnected) => Err(ShellError::Interrupted { span }),
|
||||
}
|
||||
}
|
||||
@ -175,7 +175,7 @@ fn recv_with_time_limit(
|
||||
}
|
||||
|
||||
if time_until_deadline.is_zero() {
|
||||
return Err(ShellError::RecvTimeout { span });
|
||||
return Err(JobError::RecvTimeout { span }.into());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -52,14 +52,10 @@ This command never blocks.
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let head = call.head;
|
||||
|
||||
let id_arg: Spanned<i64> = call.req(engine_state, stack, 0)?;
|
||||
let id_arg: Spanned<usize> = call.req(engine_state, stack, 0)?;
|
||||
let tag_arg: Option<Spanned<i64>> = call.get_flag(engine_state, stack, "tag")?;
|
||||
|
||||
let id = id_arg.item;
|
||||
|
||||
if id < 0 {
|
||||
return Err(ShellError::NeedsPositiveValue { span: id_arg.span });
|
||||
}
|
||||
let id = JobId::new(id_arg.item);
|
||||
|
||||
if let Some(tag) = tag_arg {
|
||||
if tag.item < 0 {
|
||||
@ -69,7 +65,7 @@ This command never blocks.
|
||||
|
||||
let tag = tag_arg.map(|it| it.item as FilterTag);
|
||||
|
||||
if id == 0 {
|
||||
if id == JobId::ZERO {
|
||||
engine_state
|
||||
.root_job_sender
|
||||
.send((tag, input))
|
||||
@ -77,7 +73,7 @@ This command never blocks.
|
||||
} else {
|
||||
let jobs = engine_state.jobs.lock().expect("failed to acquire lock");
|
||||
|
||||
if let Some(job) = jobs.lookup(JobId::new(id as usize)) {
|
||||
if let Some(job) = jobs.lookup(id) {
|
||||
match job {
|
||||
nu_protocol::engine::Job::Thread(thread_job) => {
|
||||
// it is ok to send this value while holding the lock, because
|
||||
@ -85,17 +81,19 @@ This command never blocks.
|
||||
let _ = thread_job.sender.send((tag, input));
|
||||
}
|
||||
nu_protocol::engine::Job::Frozen(_) => {
|
||||
return Err(ShellError::JobIsFrozen {
|
||||
id: id as usize,
|
||||
return Err(JobError::AlreadyFrozen {
|
||||
span: id_arg.span,
|
||||
});
|
||||
id,
|
||||
}
|
||||
.into());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return Err(ShellError::JobNotFound {
|
||||
id: id as usize,
|
||||
return Err(JobError::NotFound {
|
||||
span: id_arg.span,
|
||||
});
|
||||
id,
|
||||
}
|
||||
.into());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,26 +38,15 @@ impl Command for JobTag {
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let head = call.head;
|
||||
|
||||
let id_arg: Spanned<i64> = call.req(engine_state, stack, 0)?;
|
||||
|
||||
if id_arg.item < 0 {
|
||||
return Err(ShellError::NeedsPositiveValue { span: id_arg.span });
|
||||
}
|
||||
|
||||
let id: JobId = JobId::new(id_arg.item as usize);
|
||||
let id_arg: Spanned<usize> = call.req(engine_state, stack, 0)?;
|
||||
let id = JobId::new(id_arg.item);
|
||||
|
||||
let tag: Option<String> = call.req(engine_state, stack, 1)?;
|
||||
|
||||
let mut jobs = engine_state.jobs.lock().expect("jobs lock is poisoned!");
|
||||
|
||||
match jobs.lookup_mut(id) {
|
||||
None => {
|
||||
return Err(ShellError::JobNotFound {
|
||||
id: id.get(),
|
||||
span: head,
|
||||
});
|
||||
}
|
||||
|
||||
None => return Err(JobError::NotFound { span: head, id }.into()),
|
||||
Some(job) => job.assign_tag(tag),
|
||||
}
|
||||
|
||||
|
@ -39,33 +39,18 @@ impl Command for JobUnfreeze {
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let head = call.head;
|
||||
|
||||
let option_id: Option<Spanned<i64>> = call.opt(engine_state, stack, 0)?;
|
||||
|
||||
let mut jobs = engine_state.jobs.lock().expect("jobs lock is poisoned!");
|
||||
|
||||
if let Some(id_arg) = option_id {
|
||||
if id_arg.item < 0 {
|
||||
return Err(ShellError::NeedsPositiveValue { span: id_arg.span });
|
||||
}
|
||||
}
|
||||
|
||||
let id = option_id
|
||||
.map(|it| JobId::new(it.item as usize))
|
||||
let id: Option<usize> = call.opt(engine_state, stack, 0)?;
|
||||
let id = id
|
||||
.map(JobId::new)
|
||||
.or_else(|| jobs.most_recent_frozen_job_id())
|
||||
.ok_or_else(|| ShellError::NoFrozenJob { span: head })?;
|
||||
.ok_or(JobError::NoneToUnfreeze { span: head })?;
|
||||
|
||||
let job = match jobs.lookup(id) {
|
||||
None => {
|
||||
return Err(ShellError::JobNotFound {
|
||||
id: id.get(),
|
||||
span: head,
|
||||
});
|
||||
}
|
||||
None => return Err(JobError::NotFound { span: head, id }.into()),
|
||||
Some(Job::Thread(ThreadJob { .. })) => {
|
||||
return Err(ShellError::JobNotFrozen {
|
||||
id: id.get(),
|
||||
span: head,
|
||||
});
|
||||
return Err(JobError::CannotUnfreeze { span: head, id }.into());
|
||||
}
|
||||
Some(Job::Frozen(FrozenJob { .. })) => jobs
|
||||
.remove_job(id)
|
||||
@ -107,11 +92,7 @@ fn unfreeze_job(
|
||||
span: Span,
|
||||
) -> Result<(), ShellError> {
|
||||
match job {
|
||||
Job::Thread(ThreadJob { .. }) => Err(ShellError::JobNotFrozen {
|
||||
id: old_id.get(),
|
||||
span,
|
||||
}),
|
||||
|
||||
Job::Thread(ThreadJob { .. }) => Err(JobError::CannotUnfreeze { span, id: old_id }.into()),
|
||||
Job::Frozen(FrozenJob {
|
||||
unfreeze: handle,
|
||||
tag,
|
||||
|
Reference in New Issue
Block a user