From 8d166c764251042287626ab37a1148386cef8371 Mon Sep 17 00:00:00 2001 From: Yuya Nishihara Date: Sat, 24 Aug 2024 11:09:01 +0900 Subject: [PATCH] templater: integrate copy tracking in commit.diff() template --- cli/src/commit_templater.rs | 8 +++++- cli/tests/test_commit_template.rs | 42 ++++++++++++++++++++++++------- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/cli/src/commit_templater.rs b/cli/src/commit_templater.rs index 908fe51b46..7813b72714 100644 --- a/cli/src/commit_templater.rs +++ b/cli/src/commit_templater.rs @@ -1311,11 +1311,17 @@ impl TreeDiff { commit: &Commit, matcher: Rc, ) -> BackendResult { + let mut copy_records = CopyRecords::default(); + for parent in commit.parent_ids() { + let records = + diff_util::get_copy_records(repo.store(), parent, commit.id(), &*matcher)?; + copy_records.add_records(records)?; + } Ok(TreeDiff { from_tree: commit.parent_tree(repo)?, to_tree: commit.tree()?, matcher, - copy_records: Default::default(), // TODO: real copy tracking + copy_records, }) } diff --git a/cli/tests/test_commit_template.rs b/cli/tests/test_commit_template.rs index c711f14b78..e63c0f7cc8 100644 --- a/cli/tests/test_commit_template.rs +++ b/cli/tests/test_commit_template.rs @@ -951,9 +951,15 @@ fn test_log_diff_predefined_formats() { std::fs::write(repo_path.join("file1"), "a\nb\n").unwrap(); std::fs::write(repo_path.join("file2"), "a\n").unwrap(); + std::fs::write(repo_path.join("rename-source"), "rename").unwrap(); test_env.jj_cmd_ok(&repo_path, &["new"]); std::fs::write(repo_path.join("file1"), "a\nb\nc\n").unwrap(); std::fs::write(repo_path.join("file2"), "b\nc\n").unwrap(); + std::fs::rename( + repo_path.join("rename-source"), + repo_path.join("rename-target"), + ) + .unwrap(); let template = r#" concat( @@ -982,6 +988,7 @@ fn test_log_diff_predefined_formats() { Modified regular file file2:  1  1: ab  2: c + Modified regular file rename-target (rename-source => rename-target): === git === diff --git a/file1 b/file1 index 422c2b7ab3..de980441c3 100644 @@ -999,13 +1006,18 @@ fn test_log_diff_predefined_formats() { -a +b +c + diff --git a/rename-source b/rename-target + rename from rename-source + rename to rename-target === stat === - file1 | 1 + - file2 | 3 ++- - 2 files changed, 3 insertions(+), 1 deletion(-) + file1 | 1 + + file2 | 3 ++- + {rename-source => rename-target} | 0 + 3 files changed, 3 insertions(+), 1 deletion(-) === summary === M file1 M file2 + R {rename-source => rename-target} "###); // color labels @@ -1022,6 +1034,7 @@ fn test_log_diff_predefined_formats() { <> <><><><><><><> <><><><> + < rename-target):>> <> <> <> @@ -1039,13 +1052,18 @@ fn test_log_diff_predefined_formats() { <><><> <><><> <><> + <> + <> + <> <> - <><><> - <><><> - <> + <><><> + <><><> + < rename-target} | 0>><> + <> <> <> <> + < rename-target}>> "###); // cwd != workspace root @@ -1062,6 +1080,7 @@ fn test_log_diff_predefined_formats() { Modified regular file repo/file2: 1 1: ab 2: c + Modified regular file repo/rename-target (repo/rename-source => repo/rename-target): === git === diff --git a/file1 b/file1 index 422c2b7ab3..de980441c3 100644 @@ -1079,13 +1098,18 @@ fn test_log_diff_predefined_formats() { -a +b +c + diff --git a/rename-source b/rename-target + rename from rename-source + rename to rename-target === stat === - repo/file1 | 1 + - repo/file2 | 3 ++- - 2 files changed, 3 insertions(+), 1 deletion(-) + repo/file1 | 1 + + repo/file2 | 3 ++- + repo/{rename-source => rename-target} | 0 + 3 files changed, 3 insertions(+), 1 deletion(-) === summary === M repo/file1 M repo/file2 + R repo/{rename-source => rename-target} "###); // color_words() with parameters