Move string-to-filenames-vector code to its own function

This commit is contained in:
Ben S 2014-07-05 22:36:43 +01:00
parent 0de80ad7ec
commit 8daeba2617
2 changed files with 27 additions and 31 deletions

View File

@ -26,43 +26,39 @@ fn main() {
match Options::getopts(args) { match Options::getopts(args) {
Err(err) => println!("Invalid options:\n{}", err), Err(err) => println!("Invalid options:\n{}", err),
Ok(opts) => { Ok(opts) => exa(&opts),
if opts.dirs.is_empty() {
exa(&opts, false, ".".to_string())
}
else {
let mut first = true;
let print_dir_names = opts.dirs.len() > 1;
for dir in opts.dirs.clone().move_iter() {
if first {
first = false;
}
else {
print!("\n");
}
exa(&opts, print_dir_names, dir)
}
}
}
}; };
} }
fn exa(options: &Options, print_dir_names: bool, string: String) { fn exa(opts: &Options) {
let path = Path::new(string.clone()); let mut first = true;
let dir = match Dir::readdir(path) { // It's only worth printing out directory names if the user supplied
Ok(dir) => dir, // more than one of them.
Err(e) => { let print_dir_names = opts.dirs.len() > 1;
println!("{}: {}", string, e);
return; for dir_name in opts.dirs.clone().move_iter() {
if first {
first = false;
}
else {
print!("\n");
} }
};
// Print header *after* readdir must have succeeded match Dir::readdir(Path::new(dir_name.clone())) {
if print_dir_names { Ok(dir) => {
println!("{}:", string); if print_dir_names { println!("{}:", dir_name); }
lines_view(opts, dir);
}
Err(e) => {
println!("{}: {}", dir_name, e);
return;
}
};
} }
}
fn lines_view(options: &Options, dir: Dir) {
let unsorted_files = dir.files(); let unsorted_files = dir.files();
let files: Vec<&File> = options.transform_files(&unsorted_files); let files: Vec<&File> = options.transform_files(&unsorted_files);

View File

@ -50,7 +50,7 @@ impl Options {
reverse: matches.opt_present("reverse"), reverse: matches.opt_present("reverse"),
header: matches.opt_present("header"), header: matches.opt_present("header"),
sortField: matches.opt_str("sort").map(|word| SortField::from_word(word)).unwrap_or(Name), sortField: matches.opt_str("sort").map(|word| SortField::from_word(word)).unwrap_or(Name),
dirs: matches.free.clone(), dirs: if matches.free.is_empty() { vec![ ".".to_string() ] } else { matches.free.clone() },
columns: Options::columns(matches), columns: Options::columns(matches),
}) })
} }