feat: implement mode_diff function with diff command

This commit is contained in:
Andrew Phillips (aider)
2025-05-06 11:00:36 -03:00
parent c1e04fc9c5
commit 61b41a1852

View File

@@ -516,8 +516,35 @@ fn mode_diff(cmd: &mut Command, args: Args, ids: &mut Vec<i64>, tags: &mut Vec<S
let compression_engine_b = compression::get_engine(compression_type_b).expect("Unable to get compression engine");
let program = "diff";
let args = ["-u"];
let (fd_a, path_a) = tempfile::NamedTempFile::new().unwrap();
let (fd_b, path_b) = tempfile::NamedTempFile::new().unwrap();
let mut stdout_a = io::stdout();
let mut stdout_b = io::stdout();
let mut stdout_a = stdout_a.duplicate().unwrap();
let mut stdout_b = stdout_b.duplicate().unwrap();
io::stdout().set_fd(fd_a.as_raw_fd()).unwrap();
compression_engine_a.cat(item_path_a.clone())?;
io::stdout().set_fd(stdout_a.as_raw_fd()).unwrap();
io::stdout().set_fd(fd_b.as_raw_fd()).unwrap();
compression_engine_b.cat(item_path_b.clone())?;
io::stdout().set_fd(stdout_b.as_raw_fd()).unwrap();
let output = std::process::Command::new("diff")
.arg("-u")
.arg(path_a)
.arg(path_b)
.output()
.expect("Failed to execute diff command");
if output.status.success() {
println!("{}", String::from_utf8_lossy(&output.stdout));
} else {
eprintln!("{}", String::from_utf8_lossy(&output.stderr));
}
Ok(())
} else {