rustfmt'd the codebase
This commit is contained in:
@@ -16,8 +16,8 @@ pub enum JobBehavior {
|
||||
|
||||
pub fn continue_job(node: Node, behavior: JobBehavior) -> ShResult<()> {
|
||||
let blame = node.get_span().clone();
|
||||
let cmd_tk = node.get_command();
|
||||
let cmd_span = cmd_tk.unwrap().span.clone();
|
||||
let cmd_tk = node.get_command();
|
||||
let cmd_span = cmd_tk.unwrap().span.clone();
|
||||
let cmd = match behavior {
|
||||
JobBehavior::Foregound => "fg",
|
||||
JobBehavior::Background => "bg",
|
||||
@@ -31,11 +31,17 @@ pub fn continue_job(node: Node, behavior: JobBehavior) -> ShResult<()> {
|
||||
};
|
||||
|
||||
let mut argv = prepare_argv(argv)?;
|
||||
if !argv.is_empty() { argv.remove(0); }
|
||||
if !argv.is_empty() {
|
||||
argv.remove(0);
|
||||
}
|
||||
let mut argv = argv.into_iter();
|
||||
|
||||
if read_jobs(|j| j.get_fg().is_some()) {
|
||||
return Err(ShErr::at(ShErrKind::InternalErr, cmd_span, format!("Somehow called '{}' with an existing foreground job", cmd)));
|
||||
return Err(ShErr::at(
|
||||
ShErrKind::InternalErr,
|
||||
cmd_span,
|
||||
format!("Somehow called '{}' with an existing foreground job", cmd),
|
||||
));
|
||||
}
|
||||
|
||||
let curr_job_id = if let Some(id) = read_jobs(|j| j.curr_job()) {
|
||||
@@ -55,7 +61,11 @@ pub fn continue_job(node: Node, behavior: JobBehavior) -> ShResult<()> {
|
||||
if query_result.is_some() {
|
||||
Ok(j.remove_job(id.clone()).unwrap())
|
||||
} else {
|
||||
Err(ShErr::at(ShErrKind::ExecFail, blame.clone(), format!("Job id `{}' not found", tabid)))
|
||||
Err(ShErr::at(
|
||||
ShErrKind::ExecFail,
|
||||
blame.clone(),
|
||||
format!("Job id `{}' not found", tabid),
|
||||
))
|
||||
}
|
||||
})?;
|
||||
|
||||
@@ -82,12 +92,16 @@ fn parse_job_id(arg: &str, blame: Span) -> ShResult<usize> {
|
||||
if arg.starts_with('%') {
|
||||
let arg = arg.strip_prefix('%').unwrap();
|
||||
if arg.chars().all(|ch| ch.is_ascii_digit()) {
|
||||
let num = arg.parse::<usize>().unwrap_or_default();
|
||||
if num == 0 {
|
||||
Err(ShErr::at(ShErrKind::SyntaxErr, blame, format!("Invalid job id: {}", arg.fg(next_color()))))
|
||||
} else {
|
||||
Ok(num.saturating_sub(1))
|
||||
}
|
||||
let num = arg.parse::<usize>().unwrap_or_default();
|
||||
if num == 0 {
|
||||
Err(ShErr::at(
|
||||
ShErrKind::SyntaxErr,
|
||||
blame,
|
||||
format!("Invalid job id: {}", arg.fg(next_color())),
|
||||
))
|
||||
} else {
|
||||
Ok(num.saturating_sub(1))
|
||||
}
|
||||
} else {
|
||||
let result = write_jobs(|j| {
|
||||
let query_result = j.query(JobID::Command(arg.into()));
|
||||
@@ -95,7 +109,11 @@ fn parse_job_id(arg: &str, blame: Span) -> ShResult<usize> {
|
||||
});
|
||||
match result {
|
||||
Some(id) => Ok(id),
|
||||
None => Err(ShErr::at(ShErrKind::InternalErr, blame, "Found a job but no table id in parse_job_id()")),
|
||||
None => Err(ShErr::at(
|
||||
ShErrKind::InternalErr,
|
||||
blame,
|
||||
"Found a job but no table id in parse_job_id()",
|
||||
)),
|
||||
}
|
||||
}
|
||||
} else if arg.chars().all(|ch| ch.is_ascii_digit()) {
|
||||
@@ -115,10 +133,18 @@ fn parse_job_id(arg: &str, blame: Span) -> ShResult<usize> {
|
||||
|
||||
match result {
|
||||
Some(id) => Ok(id),
|
||||
None => Err(ShErr::at(ShErrKind::InternalErr, blame, "Found a job but no table id in parse_job_id()")),
|
||||
None => Err(ShErr::at(
|
||||
ShErrKind::InternalErr,
|
||||
blame,
|
||||
"Found a job but no table id in parse_job_id()",
|
||||
)),
|
||||
}
|
||||
} else {
|
||||
Err(ShErr::at(ShErrKind::SyntaxErr, blame, format!("Invalid arg: {}", arg.fg(next_color()))))
|
||||
Err(ShErr::at(
|
||||
ShErrKind::SyntaxErr,
|
||||
blame,
|
||||
format!("Invalid arg: {}", arg.fg(next_color())),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,13 +158,19 @@ pub fn jobs(node: Node) -> ShResult<()> {
|
||||
};
|
||||
|
||||
let mut argv = prepare_argv(argv)?;
|
||||
if !argv.is_empty() { argv.remove(0); }
|
||||
if !argv.is_empty() {
|
||||
argv.remove(0);
|
||||
}
|
||||
|
||||
let mut flags = JobCmdFlags::empty();
|
||||
for (arg, span) in argv {
|
||||
let mut chars = arg.chars().peekable();
|
||||
if chars.peek().is_none_or(|ch| *ch != '-') {
|
||||
return Err(ShErr::at(ShErrKind::SyntaxErr, span, "Invalid flag in jobs call"));
|
||||
return Err(ShErr::at(
|
||||
ShErrKind::SyntaxErr,
|
||||
span,
|
||||
"Invalid flag in jobs call",
|
||||
));
|
||||
}
|
||||
chars.next();
|
||||
for ch in chars {
|
||||
@@ -149,7 +181,11 @@ pub fn jobs(node: Node) -> ShResult<()> {
|
||||
'r' => JobCmdFlags::RUNNING,
|
||||
's' => JobCmdFlags::STOPPED,
|
||||
_ => {
|
||||
return Err(ShErr::at(ShErrKind::SyntaxErr, span, "Invalid flag in jobs call"));
|
||||
return Err(ShErr::at(
|
||||
ShErrKind::SyntaxErr,
|
||||
span,
|
||||
"Invalid flag in jobs call",
|
||||
));
|
||||
}
|
||||
};
|
||||
flags |= flag
|
||||
@@ -162,41 +198,44 @@ pub fn jobs(node: Node) -> ShResult<()> {
|
||||
}
|
||||
|
||||
pub fn wait(node: Node) -> ShResult<()> {
|
||||
let blame = node.get_span().clone();
|
||||
let NdRule::Command {
|
||||
assignments: _,
|
||||
argv,
|
||||
} = node.class
|
||||
else {
|
||||
unreachable!()
|
||||
};
|
||||
let blame = node.get_span().clone();
|
||||
let NdRule::Command {
|
||||
assignments: _,
|
||||
argv,
|
||||
} = node.class
|
||||
else {
|
||||
unreachable!()
|
||||
};
|
||||
|
||||
let mut argv = prepare_argv(argv)?;
|
||||
if !argv.is_empty() { argv.remove(0); }
|
||||
if read_jobs(|j| j.curr_job().is_none()) {
|
||||
state::set_status(0);
|
||||
return Err(ShErr::at(ShErrKind::ExecFail, blame, "wait: No jobs found"));
|
||||
}
|
||||
let argv = argv.into_iter()
|
||||
.map(|arg| {
|
||||
if arg.0.as_str().chars().all(|ch| ch.is_ascii_digit()) {
|
||||
Ok(JobID::Pid(Pid::from_raw(arg.0.parse::<i32>().unwrap())))
|
||||
} else {
|
||||
Ok(JobID::TableID(parse_job_id(&arg.0, arg.1)?))
|
||||
}
|
||||
})
|
||||
.collect::<ShResult<Vec<JobID>>>()?;
|
||||
let mut argv = prepare_argv(argv)?;
|
||||
if !argv.is_empty() {
|
||||
argv.remove(0);
|
||||
}
|
||||
if read_jobs(|j| j.curr_job().is_none()) {
|
||||
state::set_status(0);
|
||||
return Err(ShErr::at(ShErrKind::ExecFail, blame, "wait: No jobs found"));
|
||||
}
|
||||
let argv = argv
|
||||
.into_iter()
|
||||
.map(|arg| {
|
||||
if arg.0.as_str().chars().all(|ch| ch.is_ascii_digit()) {
|
||||
Ok(JobID::Pid(Pid::from_raw(arg.0.parse::<i32>().unwrap())))
|
||||
} else {
|
||||
Ok(JobID::TableID(parse_job_id(&arg.0, arg.1)?))
|
||||
}
|
||||
})
|
||||
.collect::<ShResult<Vec<JobID>>>()?;
|
||||
|
||||
if argv.is_empty() {
|
||||
write_jobs(|j| j.wait_all_bg())?;
|
||||
} else {
|
||||
for arg in argv {
|
||||
wait_bg(arg)?;
|
||||
}
|
||||
}
|
||||
if argv.is_empty() {
|
||||
write_jobs(|j| j.wait_all_bg())?;
|
||||
} else {
|
||||
for arg in argv {
|
||||
wait_bg(arg)?;
|
||||
}
|
||||
}
|
||||
|
||||
// don't set status here, the status of the waited-on job should be the status of the wait builtin
|
||||
Ok(())
|
||||
// don't set status here, the status of the waited-on job should be the status of the wait builtin
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn disown(node: Node) -> ShResult<()> {
|
||||
@@ -210,13 +249,19 @@ pub fn disown(node: Node) -> ShResult<()> {
|
||||
};
|
||||
|
||||
let mut argv = prepare_argv(argv)?;
|
||||
if !argv.is_empty() { argv.remove(0); }
|
||||
if !argv.is_empty() {
|
||||
argv.remove(0);
|
||||
}
|
||||
let mut argv = argv.into_iter();
|
||||
|
||||
let curr_job_id = if let Some(id) = read_jobs(|j| j.curr_job()) {
|
||||
id
|
||||
} else {
|
||||
return Err(ShErr::at(ShErrKind::ExecFail, blame, "disown: No jobs to disown"));
|
||||
return Err(ShErr::at(
|
||||
ShErrKind::ExecFail,
|
||||
blame,
|
||||
"disown: No jobs to disown",
|
||||
));
|
||||
};
|
||||
|
||||
let mut tabid = curr_job_id;
|
||||
|
||||
Reference in New Issue
Block a user