diff --git a/asyncgit/src/sync/commit_files.rs b/asyncgit/src/sync/commit_files.rs index a3f61939..0b96f83f 100644 --- a/asyncgit/src/sync/commit_files.rs +++ b/asyncgit/src/sync/commit_files.rs @@ -55,6 +55,7 @@ pub(crate) fn get_commit_diff( let mut opt = pathspec.map(|p| { let mut opts = DiffOptions::new(); opts.pathspec(p); + opts.show_binary(true); opts }); diff --git a/asyncgit/src/sync/diff.rs b/asyncgit/src/sync/diff.rs index a4b5aa97..e265d40b 100644 --- a/asyncgit/src/sync/diff.rs +++ b/asyncgit/src/sync/diff.rs @@ -298,12 +298,13 @@ fn new_file_content(path: &Path) -> Option { #[cfg(test)] mod tests { - use super::get_diff; + use super::{get_diff, get_diff_commit}; use crate::error::Result; use crate::sync::{ commit, stage_add_file, status::{get_status, StatusType}, tests::{get_statuses, repo_init, repo_init_empty}, + CommitId, }; use std::{ fs::{self, File}, @@ -507,4 +508,38 @@ mod tests { Ok(()) } + + #[test] + fn test_diff_delta_size_commit() -> Result<()> { + let file_path = Path::new("bar"); + let (_td, repo) = repo_init_empty().unwrap(); + let root = repo.path().parent().unwrap(); + let repo_path = root.as_os_str().to_str().unwrap(); + + File::create(&root.join(file_path))?.write_all(b"\x00")?; + + stage_add_file(repo_path, file_path).unwrap(); + + commit(repo_path, "").unwrap(); + + File::create(&root.join(file_path))? + .write_all(b"\x00\x02")?; + + stage_add_file(repo_path, file_path).unwrap(); + + let id = commit(repo_path, "").unwrap(); + + let diff = get_diff_commit( + repo_path, + CommitId::new(id), + String::new(), + ) + .unwrap(); + + dbg!(&diff); + assert_eq!(diff.sizes, (1, 2)); + assert_eq!(diff.size_delta, 1); + + Ok(()) + } }