Support ctrl-c cancellation in from csv/tsv
This commit is contained in:
parent
75d5807dcd
commit
280ddcfe1e
|
@ -176,7 +176,8 @@ fn from_csv(
|
||||||
trim,
|
trim,
|
||||||
};
|
};
|
||||||
|
|
||||||
from_delimited_data(config, input, name)
|
let ctrlc = engine_state.ctrlc.clone();
|
||||||
|
from_delimited_data(config, input, name, ctrlc)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
use std::sync::{atomic::AtomicBool, Arc};
|
||||||
|
|
||||||
use csv::{ReaderBuilder, Trim};
|
use csv::{ReaderBuilder, Trim};
|
||||||
use nu_protocol::{ByteStream, ListStream, PipelineData, ShellError, Span, Value};
|
use nu_protocol::{ByteStream, ListStream, PipelineData, ShellError, Span, Value};
|
||||||
|
|
||||||
|
@ -21,6 +23,7 @@ fn from_delimited_stream(
|
||||||
}: DelimitedReaderConfig,
|
}: DelimitedReaderConfig,
|
||||||
input: ByteStream,
|
input: ByteStream,
|
||||||
span: Span,
|
span: Span,
|
||||||
|
ctrl_c: Option<Arc<AtomicBool>>,
|
||||||
) -> Result<ListStream, ShellError> {
|
) -> Result<ListStream, ShellError> {
|
||||||
let input_reader = if let Some(stream) = input.reader() {
|
let input_reader = if let Some(stream) = input.reader() {
|
||||||
stream
|
stream
|
||||||
|
@ -83,7 +86,7 @@ fn from_delimited_stream(
|
||||||
Value::record(columns.zip(values).collect(), span)
|
Value::record(columns.zip(values).collect(), span)
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(ListStream::new(iter, span, None))
|
Ok(ListStream::new(iter, span, ctrl_c))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) struct DelimitedReaderConfig {
|
pub(super) struct DelimitedReaderConfig {
|
||||||
|
@ -101,6 +104,7 @@ pub(super) fn from_delimited_data(
|
||||||
config: DelimitedReaderConfig,
|
config: DelimitedReaderConfig,
|
||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
name: Span,
|
name: Span,
|
||||||
|
ctrl_c: Option<Arc<AtomicBool>>,
|
||||||
) -> Result<PipelineData, ShellError> {
|
) -> Result<PipelineData, ShellError> {
|
||||||
match input {
|
match input {
|
||||||
PipelineData::Empty => Ok(PipelineData::Empty),
|
PipelineData::Empty => Ok(PipelineData::Empty),
|
||||||
|
@ -108,7 +112,7 @@ pub(super) fn from_delimited_data(
|
||||||
let string = value.into_string()?;
|
let string = value.into_string()?;
|
||||||
let byte_stream = ByteStream::read_string(string, name, None);
|
let byte_stream = ByteStream::read_string(string, name, None);
|
||||||
Ok(PipelineData::ListStream(
|
Ok(PipelineData::ListStream(
|
||||||
from_delimited_stream(config, byte_stream, name)?,
|
from_delimited_stream(config, byte_stream, name, ctrl_c)?,
|
||||||
metadata,
|
metadata,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -119,7 +123,7 @@ pub(super) fn from_delimited_data(
|
||||||
src_span: list_stream.span(),
|
src_span: list_stream.span(),
|
||||||
}),
|
}),
|
||||||
PipelineData::ByteStream(byte_stream, metadata) => Ok(PipelineData::ListStream(
|
PipelineData::ByteStream(byte_stream, metadata) => Ok(PipelineData::ListStream(
|
||||||
from_delimited_stream(config, byte_stream, name)?,
|
from_delimited_stream(config, byte_stream, name, ctrl_c)?,
|
||||||
metadata,
|
metadata,
|
||||||
)),
|
)),
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,7 +142,8 @@ fn from_tsv(
|
||||||
trim,
|
trim,
|
||||||
};
|
};
|
||||||
|
|
||||||
from_delimited_data(config, input, name)
|
let ctrlc = engine_state.ctrlc.clone();
|
||||||
|
from_delimited_data(config, input, name, ctrlc)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user