summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2018-10-07 12:00:06 +0100
committerGitHub <noreply@github.com>2018-10-07 12:00:06 +0100
commit0cd976c831ff32b1303bfca5ce4939af3a812473 (patch)
tree9da704f067d3b7524af0fe26495276240c0c1524
parent0c973356f2ee49e4f22e93a4155cf0c7c32cf9d7 (diff)
parente5090ee329aecdc2a298e442868cbf1d4b10d0e9 (diff)
downloadlibgit2-0cd976c831ff32b1303bfca5ce4939af3a812473.tar.gz
Merge pull request #4830 from pks-t/pks/diff-stats-rename-common
diff_stats: use git's formatting of renames with common directories
-rw-r--r--src/diff_stats.c22
-rw-r--r--tests/diff/stats.c19
-rw-r--r--tests/resources/diff_format_email/.gitted/indexbin289 -> 621 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/07/594f324ebcf92902334c6016e30e716431dfbcbin0 -> 152 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/0d/593fca18d1ab11deb6e8025c9fe417456fe883bin0 -> 56 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/0d/b2a262bc8c5c3cba55254730045a8258da7a372
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/39/ed6bbd76bca81c50db3aaca261456284f5d5b8bin0 -> 49 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/53/92ef3c959f744b892bbebb168bbbb7b05c03f3bin0 -> 150 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/85/fa91713734c588c897dd6dd67a39576f67ae50bin0 -> 157 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/8c/637df9661edd808932b2f5d383f2c41ced9f06bin0 -> 150 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/94/f84b3e65e8bcbe8bffef2c885339343a802dd4bin0 -> 53 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/bb/07a00e58b260c4eb9a82f8afbc1d80ad9739bfbin0 -> 171 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/refs/heads/master2
-rw-r--r--tests/resources/diff_format_email/dir/renamed.txt5
14 files changed, 45 insertions, 5 deletions
diff --git a/src/diff_stats.c b/src/diff_stats.c
index 583c68459..3af591443 100644
--- a/src/diff_stats.c
+++ b/src/diff_stats.c
@@ -61,15 +61,29 @@ int git_diff_file_stats__full_to_buf(
old_size = delta->old_file.size;
new_size = delta->new_file.size;
- if (git_buf_printf(out, " %s", old_path) < 0)
- goto on_error;
-
if (strcmp(old_path, new_path) != 0) {
+ size_t common_dirlen;
+ int error;
+
padding = stats->max_name - strlen(old_path) - strlen(new_path);
- if (git_buf_printf(out, DIFF_RENAME_FILE_SEPARATOR "%s", new_path) < 0)
+ if ((common_dirlen = git_path_common_dirlen(old_path, new_path)) &&
+ common_dirlen <= INT_MAX) {
+ error = git_buf_printf(out, " %.*s{%s"DIFF_RENAME_FILE_SEPARATOR"%s}",
+ (int) common_dirlen, old_path,
+ old_path + common_dirlen,
+ new_path + common_dirlen);
+ } else {
+ error = git_buf_printf(out, " %s" DIFF_RENAME_FILE_SEPARATOR "%s",
+ old_path, new_path);
+ }
+
+ if (error < 0)
goto on_error;
} else {
+ if (git_buf_printf(out, " %s", old_path) < 0)
+ goto on_error;
+
padding = stats->max_name - strlen(old_path);
if (stats->renames > 0)
diff --git a/tests/diff/stats.c b/tests/diff/stats.c
index 24316f715..150355686 100644
--- a/tests/diff/stats.c
+++ b/tests/diff/stats.c
@@ -210,6 +210,25 @@ void test_diff_stats__rename_and_modifiy(void)
git_buf_dispose(&buf);
}
+void test_diff_stats__rename_in_subdirectory(void)
+{
+ git_buf buf = GIT_BUF_INIT;
+ const char *stat =
+ " dir/{orig.txt => renamed.txt} | 0\n"
+ " 1 file changed, 0 insertions(+), 0 deletions(-)\n";
+
+ diff_stats_from_commit_oid(
+ &_stats, "0db2a262bc8c5c3cba55254730045a8258da7a37", true);
+
+ cl_assert_equal_sz(1, git_diff_stats_files_changed(_stats));
+ cl_assert_equal_sz(0, git_diff_stats_insertions(_stats));
+ cl_assert_equal_sz(0, git_diff_stats_deletions(_stats));
+
+ cl_git_pass(git_diff_stats_to_buf(&buf, _stats, GIT_DIFF_STATS_FULL, 0));
+ cl_assert_equal_s(stat, git_buf_cstr(&buf));
+ git_buf_dispose(&buf);
+}
+
void test_diff_stats__rename_no_find(void)
{
git_buf buf = GIT_BUF_INIT;
diff --git a/tests/resources/diff_format_email/.gitted/index b/tests/resources/diff_format_email/.gitted/index
index 092a888e7..4514a6b9c 100644
--- a/tests/resources/diff_format_email/.gitted/index
+++ b/tests/resources/diff_format_email/.gitted/index
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/07/594f324ebcf92902334c6016e30e716431dfbc b/tests/resources/diff_format_email/.gitted/objects/07/594f324ebcf92902334c6016e30e716431dfbc
new file mode 100644
index 000000000..bd273796a
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/07/594f324ebcf92902334c6016e30e716431dfbc
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/0d/593fca18d1ab11deb6e8025c9fe417456fe883 b/tests/resources/diff_format_email/.gitted/objects/0d/593fca18d1ab11deb6e8025c9fe417456fe883
new file mode 100644
index 000000000..e49e10778
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/0d/593fca18d1ab11deb6e8025c9fe417456fe883
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/0d/b2a262bc8c5c3cba55254730045a8258da7a37 b/tests/resources/diff_format_email/.gitted/objects/0d/b2a262bc8c5c3cba55254730045a8258da7a37
new file mode 100644
index 000000000..1399d7f1a
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/0d/b2a262bc8c5c3cba55254730045a8258da7a37
@@ -0,0 +1,2 @@
+xA
+0@Q9f6 ztBCm-i ?4VUS)EhET|}Bd66=&98Kƀ<Ɓd6*ܸՒfx4-ulp6鱗\z""k4w]yQPV2j>TI \ No newline at end of file
diff --git a/tests/resources/diff_format_email/.gitted/objects/39/ed6bbd76bca81c50db3aaca261456284f5d5b8 b/tests/resources/diff_format_email/.gitted/objects/39/ed6bbd76bca81c50db3aaca261456284f5d5b8
new file mode 100644
index 000000000..e08f03cf3
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/39/ed6bbd76bca81c50db3aaca261456284f5d5b8
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/53/92ef3c959f744b892bbebb168bbbb7b05c03f3 b/tests/resources/diff_format_email/.gitted/objects/53/92ef3c959f744b892bbebb168bbbb7b05c03f3
new file mode 100644
index 000000000..308c599ab
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/53/92ef3c959f744b892bbebb168bbbb7b05c03f3
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/85/fa91713734c588c897dd6dd67a39576f67ae50 b/tests/resources/diff_format_email/.gitted/objects/85/fa91713734c588c897dd6dd67a39576f67ae50
new file mode 100644
index 000000000..54d34128e
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/85/fa91713734c588c897dd6dd67a39576f67ae50
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/8c/637df9661edd808932b2f5d383f2c41ced9f06 b/tests/resources/diff_format_email/.gitted/objects/8c/637df9661edd808932b2f5d383f2c41ced9f06
new file mode 100644
index 000000000..e7d672bda
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/8c/637df9661edd808932b2f5d383f2c41ced9f06
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/94/f84b3e65e8bcbe8bffef2c885339343a802dd4 b/tests/resources/diff_format_email/.gitted/objects/94/f84b3e65e8bcbe8bffef2c885339343a802dd4
new file mode 100644
index 000000000..03b484808
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/94/f84b3e65e8bcbe8bffef2c885339343a802dd4
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/bb/07a00e58b260c4eb9a82f8afbc1d80ad9739bf b/tests/resources/diff_format_email/.gitted/objects/bb/07a00e58b260c4eb9a82f8afbc1d80ad9739bf
new file mode 100644
index 000000000..d2cb6d0d6
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/bb/07a00e58b260c4eb9a82f8afbc1d80ad9739bf
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/refs/heads/master b/tests/resources/diff_format_email/.gitted/refs/heads/master
index 4024b97cd..7d5e03f61 100644
--- a/tests/resources/diff_format_email/.gitted/refs/heads/master
+++ b/tests/resources/diff_format_email/.gitted/refs/heads/master
@@ -1 +1 @@
-5219b9784f9a92d7bd7cb567a6d6a21bfb86697e
+0db2a262bc8c5c3cba55254730045a8258da7a37
diff --git a/tests/resources/diff_format_email/dir/renamed.txt b/tests/resources/diff_format_email/dir/renamed.txt
new file mode 100644
index 000000000..7aff11da9
--- /dev/null
+++ b/tests/resources/diff_format_email/dir/renamed.txt
@@ -0,0 +1,5 @@
+file2
+file2
+file2
+file2!
+file2