Skip to content
Open
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
34 changes: 31 additions & 3 deletions src/ls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,28 @@ pub fn run(args: &[String], verbose: u8) -> Result<()> {
.map(|s| s.as_str())
.collect();

// Build ls -la + any extra flags the user passed (e.g. -R)
// Build baseline command (what the user would have run: plain `ls` + their flags)
let mut baseline_cmd = resolved_command("ls");
for flag in &flags {
baseline_cmd.arg(flag);
}
if paths.is_empty() {
baseline_cmd.arg(".");
} else {
for p in &paths {
baseline_cmd.arg(p);
}
}

let baseline_output = baseline_cmd.output().context("Failed to run ls")?;
if !baseline_output.status.success() {
let stderr = String::from_utf8_lossy(&baseline_output.stderr);
eprint!("{}", stderr);
std::process::exit(baseline_output.status.code().unwrap_or(1));
}
let baseline_raw = String::from_utf8_lossy(&baseline_output.stdout).to_string();

// Build enriched command used for compact display (`ls -la` + extra flags)
// Strip -l, -a, -h (we handle all of these ourselves)
let mut cmd = resolved_command("ls");
cmd.arg("-la");
Expand Down Expand Up @@ -109,11 +130,18 @@ pub fn run(args: &[String], verbose: u8) -> Result<()> {
} else {
paths.join(" ")
};
let mut baseline_cmd_display = String::from("ls");
if !flags.is_empty() {
baseline_cmd_display.push(' ');
baseline_cmd_display.push_str(&flags.join(" "));
}
baseline_cmd_display.push(' ');
baseline_cmd_display.push_str(&target_display);
print!("{}", filtered);
timer.track(
&format!("ls -la {}", target_display),
baseline_cmd_display.trim(),
"rtk ls",
&raw,
&baseline_raw,
&filtered,
);

Expand Down
Loading