Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions src/uu/head/src/head.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ mod options {
pub const VERBOSE_NAME: &str = "VERBOSE";
pub const ZERO_NAME: &str = "ZERO";
pub const FILES_NAME: &str = "FILE";
pub const PRESUME_INPUT_PIPE: &str = "-PRESUME-INPUT-PIPE";
}
mod parse;
mod take;
Expand Down Expand Up @@ -94,6 +95,12 @@ pub fn uu_app<'a>() -> Command<'a> {
.help("always print headers giving file names")
.overrides_with_all(&[options::QUIET_NAME, options::VERBOSE_NAME]),
)
.arg(
Arg::new(options::PRESUME_INPUT_PIPE)
.long("-presume-input-pipe")
.alias("-presume-input-pipe")
.hide(true),
)
.arg(
Arg::new(options::ZERO_NAME)
.short('z')
Expand Down Expand Up @@ -173,6 +180,7 @@ struct HeadOptions {
pub quiet: bool,
pub verbose: bool,
pub zeroed: bool,
pub presume_input_pipe: bool,
pub mode: Mode,
pub files: Vec<String>,
}
Expand All @@ -187,6 +195,7 @@ impl HeadOptions {
options.quiet = matches.is_present(options::QUIET_NAME);
options.verbose = matches.is_present(options::VERBOSE_NAME);
options.zeroed = matches.is_present(options::ZERO_NAME);
options.presume_input_pipe = matches.is_present(options::PRESUME_INPUT_PIPE);

options.mode = Mode::from(&matches)?;

Expand Down Expand Up @@ -423,8 +432,8 @@ fn head_file(input: &mut std::fs::File, options: &HeadOptions) -> std::io::Resul
fn uu_head(options: &HeadOptions) -> UResult<()> {
let mut first = true;
for file in &options.files {
let res = match file.as_str() {
"-" => {
let res = match (file.as_str(), options.presume_input_pipe) {
(_, true) | ("-", false) => {
if (options.files.len() > 1 && !options.quiet) || options.verbose {
if !first {
println!();
Expand Down Expand Up @@ -460,7 +469,7 @@ fn uu_head(options: &HeadOptions) -> UResult<()> {
}
}
}
name => {
(name, false) => {
let mut file = match std::fs::File::open(name) {
Ok(f) => f,
Err(err) => {
Expand Down
11 changes: 10 additions & 1 deletion src/uu/tail/src/tail.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ pub mod options {
pub static SLEEP_INT: &str = "sleep-interval";
pub static ZERO_TERM: &str = "zero-terminated";
pub static ARG_FILES: &str = "files";
pub static PRESUME_INPUT_PIPE: &str = "-presume-input-pipe";
}

#[derive(Debug)]
Expand All @@ -87,6 +88,7 @@ struct Settings {
follow: bool,
pid: platform::Pid,
files: Vec<String>,
presume_input_pipe: bool,
}

impl Settings {
Expand Down Expand Up @@ -148,6 +150,7 @@ impl Settings {

settings.verbose = matches.is_present(options::verbosity::VERBOSE);
settings.quiet = matches.is_present(options::verbosity::QUIET);
settings.presume_input_pipe = matches.is_present(options::PRESUME_INPUT_PIPE);

settings.files = match matches.values_of(options::ARG_FILES) {
Some(v) => v.map(|s| s.to_owned()).collect(),
Expand Down Expand Up @@ -192,7 +195,7 @@ fn uu_tail(settings: &Settings) -> UResult<()> {
}
first_header = false;

if use_stdin {
if use_stdin || settings.presume_input_pipe {
let mut reader = BufReader::new(stdin());
unbounded_tail(&mut reader, settings)?;

Expand Down Expand Up @@ -339,6 +342,12 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::ZERO_TERM)
.help("Line delimiter is NUL, not newline"),
)
.arg(
Arg::new(options::PRESUME_INPUT_PIPE)
.long(options::PRESUME_INPUT_PIPE)
.alias(options::PRESUME_INPUT_PIPE)
.hide(true),
)
.arg(
Arg::new(options::ARG_FILES)
.multiple_occurrences(true)
Expand Down
18 changes: 18 additions & 0 deletions tests/by-util/test_head.rs
Original file line number Diff line number Diff line change
Expand Up @@ -342,3 +342,21 @@ fn test_head_num_with_undocumented_sign_bytes() {
.succeeds()
.stdout_is("abcde");
}

#[test]
fn test_presume_input_pipe_default() {
new_ucmd!()
.args(&["---presume-input-pipe"])
.pipe_in_fixture(INPUT)
.run()
.stdout_is_fixture("lorem_ipsum_default.expected");
}

#[test]
fn test_presume_input_pipe_5_chars() {
new_ucmd!()
.args(&["-c", "5", "---presume-input-pipe"])
.pipe_in_fixture(INPUT)
.run()
.stdout_is_fixture("lorem_ipsum_5_chars.expected");
}
9 changes: 9 additions & 0 deletions tests/by-util/test_tail.rs
Original file line number Diff line number Diff line change
Expand Up @@ -563,3 +563,12 @@ fn test_lines_zero_terminated() {
.succeeds()
.stdout_only("b\0c\0d\0e\0");
}

#[test]
fn test_presume_input_pipe_default() {
new_ucmd!()
.arg("---presume-input-pipe")
.pipe_in_fixture(FOOBAR_TXT)
.run()
.stdout_is_fixture("foobar_stdin_default.expected");
}