forked from extern/nushell
Simplify run_block slightly (#2830)
* Simplify run_block slightly * Add early return on C-c
This commit is contained in:
parent
79476a5cb2
commit
69b3be61a4
@ -40,30 +40,27 @@ pub async fn run_block(
|
|||||||
inp,
|
inp,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
loop {
|
match output_stream.try_next().await {
|
||||||
match output_stream.try_next().await {
|
Ok(Some(ReturnSuccess::Value(Value {
|
||||||
Ok(Some(ReturnSuccess::Value(Value {
|
value: UntaggedValue::Error(e),
|
||||||
value: UntaggedValue::Error(e),
|
..
|
||||||
..
|
}))) => return Err(e),
|
||||||
}))) => return Err(e),
|
Ok(Some(_item)) => {
|
||||||
Ok(Some(_item)) => {
|
if let Some(err) = ctx.get_errors().get(0) {
|
||||||
if let Some(err) = ctx.get_errors().get(0) {
|
ctx.clear_errors();
|
||||||
ctx.clear_errors();
|
return Err(err.clone());
|
||||||
return Err(err.clone());
|
|
||||||
}
|
|
||||||
if ctx.ctrl_c.load(Ordering::SeqCst) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Ok(None) => {
|
if ctx.ctrl_c.load(Ordering::SeqCst) {
|
||||||
if let Some(err) = ctx.get_errors().get(0) {
|
return Ok(InputStream::empty());
|
||||||
ctx.clear_errors();
|
|
||||||
return Err(err.clone());
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
Err(e) => return Err(e),
|
|
||||||
}
|
}
|
||||||
|
Ok(None) => {
|
||||||
|
if let Some(err) = ctx.get_errors().get(0) {
|
||||||
|
ctx.clear_errors();
|
||||||
|
return Err(err.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => return Err(e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,30 +75,32 @@ pub async fn run_block(
|
|||||||
Ok(inp) => {
|
Ok(inp) => {
|
||||||
let mut output_stream = inp.to_output_stream();
|
let mut output_stream = inp.to_output_stream();
|
||||||
|
|
||||||
loop {
|
match output_stream.try_next().await {
|
||||||
match output_stream.try_next().await {
|
Ok(Some(ReturnSuccess::Value(Value {
|
||||||
Ok(Some(ReturnSuccess::Value(Value {
|
value: UntaggedValue::Error(e),
|
||||||
value: UntaggedValue::Error(e),
|
..
|
||||||
..
|
}))) => return Err(e),
|
||||||
}))) => return Err(e),
|
Ok(Some(_item)) => {
|
||||||
Ok(Some(_item)) => {
|
if let Some(err) = ctx.get_errors().get(0) {
|
||||||
if let Some(err) = ctx.get_errors().get(0) {
|
ctx.clear_errors();
|
||||||
ctx.clear_errors();
|
return Err(err.clone());
|
||||||
return Err(err.clone());
|
|
||||||
}
|
|
||||||
if ctx.ctrl_c.load(Ordering::SeqCst) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Ok(None) => {
|
if ctx.ctrl_c.load(Ordering::SeqCst) {
|
||||||
if let Some(err) = ctx.get_errors().get(0) {
|
// This early return doesn't return the result
|
||||||
ctx.clear_errors();
|
// we have so far, but breaking out of this loop
|
||||||
return Err(err.clone());
|
// causes lifetime issues. A future contribution
|
||||||
}
|
// could attempt to return the current output.
|
||||||
break;
|
// https://github.com/nushell/nushell/pull/2830#discussion_r550319687
|
||||||
|
return Ok(InputStream::empty());
|
||||||
}
|
}
|
||||||
Err(e) => return Err(e),
|
|
||||||
}
|
}
|
||||||
|
Ok(None) => {
|
||||||
|
if let Some(err) = ctx.get_errors().get(0) {
|
||||||
|
ctx.clear_errors();
|
||||||
|
return Err(err.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => return Err(e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user