Merge pull request #50 from michaelmior/print0

Add --print0 option
This commit is contained in:
David Peter 2017-08-01 21:43:30 +02:00 committed by GitHub
commit 10ea476e31
2 changed files with 23 additions and 3 deletions

View file

@ -53,6 +53,9 @@ struct FdOptions {
/// Whether to follow symlinks or not. /// Whether to follow symlinks or not.
follow_links: bool, follow_links: bool,
/// Whether elements of output should be separated by a null character
zero: bool,
/// The maximum search depth, or `None` if no maximum search depth should be set. /// The maximum search depth, or `None` if no maximum search depth should be set.
/// ///
/// A depth of `1` includes all files under the current directory, a depth of `2` also includes /// A depth of `1` includes all files under the current directory, a depth of `2` also includes
@ -143,13 +146,22 @@ fn print_entry(base: &Path, entry: &Path, config: &FdOptions) {
print!("{}", style.paint(sep)); print!("{}", style.paint(sep));
} }
} }
if config.zero {
print!("{}", '\0');
} else {
println!(); println!();
}
} else { } else {
// Uncolorized output // Uncolorized output
let prefix = if config.path_display == PathDisplay::Absolute { ROOT_DIR } else { "" }; let prefix = if config.path_display == PathDisplay::Absolute { ROOT_DIR } else { "" };
let separator = if config.zero {
"\0"
} else {
"\n"
};
let r = writeln!(&mut std::io::stdout(), "{}{}", prefix, path_str); let r = write!(&mut std::io::stdout(), "{}{}{}", prefix, path_str, separator);
if r.is_err() { if r.is_err() {
// Probably a broken pipe. Exit gracefully. // Probably a broken pipe. Exit gracefully.
@ -230,6 +242,10 @@ fn main() {
.long("follow") .long("follow")
.short("f") .short("f")
.help("Follow symlinks")) .help("Follow symlinks"))
.arg(Arg::with_name("zero")
.long("print0")
.short("0")
.help("Separate each path by the null character"))
.arg(Arg::with_name("absolute-path") .arg(Arg::with_name("absolute-path")
.long("absolute-path") .long("absolute-path")
.short("a") .short("a")
@ -306,6 +322,7 @@ fn main() {
ignore_hidden: !matches.is_present("hidden"), ignore_hidden: !matches.is_present("hidden"),
read_ignore: !matches.is_present("no-ignore"), read_ignore: !matches.is_present("no-ignore"),
follow_links: matches.is_present("follow"), follow_links: matches.is_present("follow"),
zero: matches.is_present("zero"),
max_depth: matches.value_of("depth") max_depth: matches.value_of("depth")
.and_then(|ds| usize::from_str_radix(ds, 10).ok()), .and_then(|ds| usize::from_str_radix(ds, 10).ok()),
path_display: if matches.is_present("absolute-path") || root_dir_is_absolute { path_display: if matches.is_present("absolute-path") || root_dir_is_absolute {

View file

@ -32,7 +32,7 @@ expect() {
echo "$expected_output" > "$tmp_expected" echo "$expected_output" > "$tmp_expected"
"$fd" "$@" | sort -f > "$tmp_output" "$fd" "$@" | xargs -0 echo -n | sort -f > "$tmp_output"
echo -ne " ${bold}${reset} Testing 'fd $*' ... " echo -ne " ${bold}${reset} Testing 'fd $*' ... "
@ -181,6 +181,9 @@ one/two/C.Foo2
symlink/c.foo symlink/c.foo
symlink/C.Foo2" --follow c.foo symlink/C.Foo2" --follow c.foo
suite "Null separator (--print0)"
expect "one/two/C.Foo2 one/two/c.foo one/two/three/d.foo one/two/three/directory_foo one/b.foo a.foo" --print0 foo
suite "Maximum depth (--max-depth)" suite "Maximum depth (--max-depth)"
expect "a.foo expect "a.foo