diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2018-10-07 12:00:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-07 12:00:06 +0100 |
commit | 0cd976c831ff32b1303bfca5ce4939af3a812473 (patch) | |
tree | 9da704f067d3b7524af0fe26495276240c0c1524 | |
parent | 0c973356f2ee49e4f22e93a4155cf0c7c32cf9d7 (diff) | |
parent | e5090ee329aecdc2a298e442868cbf1d4b10d0e9 (diff) | |
download | libgit2-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
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 Binary files differindex 092a888e7..4514a6b9c 100644 --- a/tests/resources/diff_format_email/.gitted/index +++ b/tests/resources/diff_format_email/.gitted/index diff --git a/tests/resources/diff_format_email/.gitted/objects/07/594f324ebcf92902334c6016e30e716431dfbc b/tests/resources/diff_format_email/.gitted/objects/07/594f324ebcf92902334c6016e30e716431dfbc Binary files differnew file mode 100644 index 000000000..bd273796a --- /dev/null +++ b/tests/resources/diff_format_email/.gitted/objects/07/594f324ebcf92902334c6016e30e716431dfbc diff --git a/tests/resources/diff_format_email/.gitted/objects/0d/593fca18d1ab11deb6e8025c9fe417456fe883 b/tests/resources/diff_format_email/.gitted/objects/0d/593fca18d1ab11deb6e8025c9fe417456fe883 Binary files differnew file mode 100644 index 000000000..e49e10778 --- /dev/null +++ b/tests/resources/diff_format_email/.gitted/objects/0d/593fca18d1ab11deb6e8025c9fe417456fe883 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 Binary files differnew file mode 100644 index 000000000..e08f03cf3 --- /dev/null +++ b/tests/resources/diff_format_email/.gitted/objects/39/ed6bbd76bca81c50db3aaca261456284f5d5b8 diff --git a/tests/resources/diff_format_email/.gitted/objects/53/92ef3c959f744b892bbebb168bbbb7b05c03f3 b/tests/resources/diff_format_email/.gitted/objects/53/92ef3c959f744b892bbebb168bbbb7b05c03f3 Binary files differnew file mode 100644 index 000000000..308c599ab --- /dev/null +++ b/tests/resources/diff_format_email/.gitted/objects/53/92ef3c959f744b892bbebb168bbbb7b05c03f3 diff --git a/tests/resources/diff_format_email/.gitted/objects/85/fa91713734c588c897dd6dd67a39576f67ae50 b/tests/resources/diff_format_email/.gitted/objects/85/fa91713734c588c897dd6dd67a39576f67ae50 Binary files differnew file mode 100644 index 000000000..54d34128e --- /dev/null +++ b/tests/resources/diff_format_email/.gitted/objects/85/fa91713734c588c897dd6dd67a39576f67ae50 diff --git a/tests/resources/diff_format_email/.gitted/objects/8c/637df9661edd808932b2f5d383f2c41ced9f06 b/tests/resources/diff_format_email/.gitted/objects/8c/637df9661edd808932b2f5d383f2c41ced9f06 Binary files differnew file mode 100644 index 000000000..e7d672bda --- /dev/null +++ b/tests/resources/diff_format_email/.gitted/objects/8c/637df9661edd808932b2f5d383f2c41ced9f06 diff --git a/tests/resources/diff_format_email/.gitted/objects/94/f84b3e65e8bcbe8bffef2c885339343a802dd4 b/tests/resources/diff_format_email/.gitted/objects/94/f84b3e65e8bcbe8bffef2c885339343a802dd4 Binary files differnew file mode 100644 index 000000000..03b484808 --- /dev/null +++ b/tests/resources/diff_format_email/.gitted/objects/94/f84b3e65e8bcbe8bffef2c885339343a802dd4 diff --git a/tests/resources/diff_format_email/.gitted/objects/bb/07a00e58b260c4eb9a82f8afbc1d80ad9739bf b/tests/resources/diff_format_email/.gitted/objects/bb/07a00e58b260c4eb9a82f8afbc1d80ad9739bf Binary files differnew file mode 100644 index 000000000..d2cb6d0d6 --- /dev/null +++ b/tests/resources/diff_format_email/.gitted/objects/bb/07a00e58b260c4eb9a82f8afbc1d80ad9739bf 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 |