nushell/src/commands/ls.rs

58 lines
1.8 KiB
Rust
Raw Normal View History

2019-05-10 18:59:12 +02:00
use crate::errors::ShellError;
2019-08-09 06:51:21 +02:00
use crate::object::dir_entry_dict;
use crate::prelude::*;
2019-06-03 09:41:28 +02:00
use std::path::{Path, PathBuf};
2019-05-10 18:59:12 +02:00
2019-07-24 00:22:11 +02:00
pub fn ls(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
let args = args.evaluate_once(registry)?;
2019-08-09 06:51:21 +02:00
let path = PathBuf::from(args.shell_manager.path());
2019-06-13 23:47:25 +02:00
let mut full_path = PathBuf::from(path);
2019-06-22 05:43:37 +02:00
match &args.nth(0) {
2019-08-09 06:51:21 +02:00
Some(Tagged {
2019-06-08 00:35:07 +02:00
item: Value::Primitive(Primitive::String(s)),
..
2019-06-22 22:46:16 +02:00
}) => full_path.push(Path::new(&s)),
2019-06-03 09:41:28 +02:00
_ => {}
}
2019-05-11 10:08:21 +02:00
2019-07-16 21:10:25 +02:00
let entries = std::fs::read_dir(&full_path);
2019-06-08 00:35:07 +02:00
2019-07-16 21:10:25 +02:00
let entries = match entries {
Err(e) => {
if let Some(s) = args.nth(0) {
return Err(ShellError::labeled_error(
e.to_string(),
e.to_string(),
2019-08-09 06:51:21 +02:00
s.span(),
2019-07-16 21:10:25 +02:00
));
} else {
2019-08-09 06:51:21 +02:00
return Err(ShellError::labeled_error(
2019-07-16 21:10:25 +02:00
e.to_string(),
e.to_string(),
2019-07-24 00:22:11 +02:00
args.name_span(),
2019-07-16 21:10:25 +02:00
));
2019-06-13 23:47:25 +02:00
}
}
2019-07-16 21:10:25 +02:00
Ok(o) => o,
};
2019-06-14 03:59:13 +02:00
2019-07-16 21:10:25 +02:00
let mut shell_entries = VecDeque::new();
for entry in entries {
2019-08-09 06:51:21 +02:00
let entry = entry?;
let filepath = entry.path();
let filename = filepath.strip_prefix(&full_path).unwrap();
let value = dir_entry_dict(
filename,
&entry.metadata()?,
Tag::unknown_origin(args.call_info.name_span),
)?;
2019-07-16 21:10:25 +02:00
shell_entries.push_back(ReturnSuccess::value(value))
2019-05-10 18:59:12 +02:00
}
2019-07-16 21:10:25 +02:00
Ok(shell_entries.to_output_stream())
2019-08-09 06:51:21 +02:00
// pub fn ls(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
// let args = args.evaluate_once(registry)?;
// args.shell_manager.ls(args, args.input)
2019-05-10 18:59:12 +02:00
}