From dc5cfdbab957a08f3ddda9889f68c81011eb1900 Mon Sep 17 00:00:00 2001 From: Sim Domingo Date: Thu, 2 Jun 2016 23:18:31 +0800 Subject: [PATCH] make git_diff_stats_to_buf not show 0 insertions or 0 deletions --- src/diff_stats.c | 26 ++++++++----- tests/diff/format_email.c | 4 +- tests/diff/stats.c | 36 ++++++++++++++++++ .../resources/diff_format_email/.gitted/index | Bin 289 -> 289 bytes .../06/b7b69a62cbd1e53c6c4e0c3f16473dcfdb4af6 | Bin 0 -> 159 bytes .../52/19b9784f9a92d7bd7cb567a6d6a21bfb86697e | Bin 0 -> 160 bytes .../53/525d4cc3ef3ba4a5cbf69492fdffb4e4a74558 | Bin 0 -> 121 bytes .../a7/a65f98355b5a7567bcc395f6f7936c9252cf57 | Bin 0 -> 28 bytes .../c7/1a05d36025c806496a74d46d7d596eb23295c4 | Bin 0 -> 28 bytes .../d3/b6b38486f620b5b532a8cc6e0198ab7c3f52e4 | Bin 0 -> 121 bytes .../.gitted/refs/heads/master | Bin 41 -> 41 bytes tests/resources/diff_format_email/file3.txt | Bin 37 -> 43 bytes 12 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 tests/resources/diff_format_email/.gitted/objects/06/b7b69a62cbd1e53c6c4e0c3f16473dcfdb4af6 create mode 100644 tests/resources/diff_format_email/.gitted/objects/52/19b9784f9a92d7bd7cb567a6d6a21bfb86697e create mode 100644 tests/resources/diff_format_email/.gitted/objects/53/525d4cc3ef3ba4a5cbf69492fdffb4e4a74558 create mode 100644 tests/resources/diff_format_email/.gitted/objects/a7/a65f98355b5a7567bcc395f6f7936c9252cf57 create mode 100644 tests/resources/diff_format_email/.gitted/objects/c7/1a05d36025c806496a74d46d7d596eb23295c4 create mode 100644 tests/resources/diff_format_email/.gitted/objects/d3/b6b38486f620b5b532a8cc6e0198ab7c3f52e4 diff --git a/src/diff_stats.c b/src/diff_stats.c index 42ccbfb87..03dbccaed 100644 --- a/src/diff_stats.c +++ b/src/diff_stats.c @@ -299,15 +299,24 @@ int git_diff_stats_to_buf( } if (format & GIT_DIFF_STATS_FULL || format & GIT_DIFF_STATS_SHORT) { - error = git_buf_printf( - out, " %" PRIuZ " file%s changed, %" PRIuZ - " insertion%s(+), %" PRIuZ " deletion%s(-)\n", - stats->files_changed, stats->files_changed != 1 ? "s" : "", - stats->insertions, stats->insertions != 1 ? "s" : "", - stats->deletions, stats->deletions != 1 ? "s" : ""); + git_buf_printf( + out, " %" PRIuZ " file%s changed", + stats->files_changed, stats->files_changed != 1 ? "s" : ""); - if (error < 0) - return error; + if (stats->insertions || stats->deletions == 0) + git_buf_printf( + out, ", %" PRIuZ " insertion%s(+)", + stats->insertions, stats->insertions != 1 ? "s" : ""); + + if (stats->deletions || stats->insertions == 0) + git_buf_printf( + out, ", %" PRIuZ " deletion%s(-)", + stats->deletions, stats->deletions != 1 ? "s" : ""); + + git_buf_putc(out, '\n'); + + if (git_buf_oom(out)) + return -1; } if (format & GIT_DIFF_STATS_INCLUDE_SUMMARY) { @@ -333,4 +342,3 @@ void git_diff_stats_free(git_diff_stats *stats) git__free(stats->filestats); git__free(stats); } - diff --git a/tests/diff/format_email.c b/tests/diff/format_email.c index e55afe958..55647937d 100644 --- a/tests/diff/format_email.c +++ b/tests/diff/format_email.c @@ -112,7 +112,7 @@ void test_diff_format_email__with_message(void) "Also test if new paragraphs are included correctly.\n" \ "---\n" \ " file3.txt | 1 +\n" \ - " 1 file changed, 1 insertion(+), 0 deletions(-)\n" \ + " 1 file changed, 1 insertion(+)\n" \ "\n" \ "diff --git a/file3.txt b/file3.txt\n" \ "index 9a2d780..7309653 100644\n" \ @@ -155,7 +155,7 @@ void test_diff_format_email__multiple(void) "---\n" \ " file2.txt | 5 +++++\n" \ " file3.txt | 5 +++++\n" \ - " 2 files changed, 10 insertions(+), 0 deletions(-)\n" \ + " 2 files changed, 10 insertions(+)\n" \ " create mode 100644 file2.txt\n" \ " create mode 100644 file3.txt\n" \ "\n" \ diff --git a/tests/diff/stats.c b/tests/diff/stats.c index f731997da..d5f7f9810 100644 --- a/tests/diff/stats.c +++ b/tests/diff/stats.c @@ -113,6 +113,42 @@ void test_diff_stats__shortstat(void) git_buf_free(&buf); } +void test_diff_stats__shortstat_noinsertions(void) +{ + git_buf buf = GIT_BUF_INIT; + const char *stat = + " 1 file changed, 2 deletions(-)\n"; + + diff_stats_from_commit_oid( + &_stats, "06b7b69a62cbd1e53c6c4e0c3f16473dcfdb4af6", false); + + 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(2, git_diff_stats_deletions(_stats)); + + cl_git_pass(git_diff_stats_to_buf(&buf, _stats, GIT_DIFF_STATS_SHORT, 0)); + cl_assert_equal_s(stat, git_buf_cstr(&buf)); + git_buf_free(&buf); +} + +void test_diff_stats__shortstat_nodeletions(void) +{ + git_buf buf = GIT_BUF_INIT; + const char *stat = + " 1 file changed, 3 insertions(+)\n"; + + diff_stats_from_commit_oid( + &_stats, "5219b9784f9a92d7bd7cb567a6d6a21bfb86697e", false); + + cl_assert_equal_sz(1, git_diff_stats_files_changed(_stats)); + cl_assert_equal_sz(3, 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_SHORT, 0)); + cl_assert_equal_s(stat, git_buf_cstr(&buf)); + git_buf_free(&buf); +} + void test_diff_stats__rename(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 d94f87de830619993545c15c09363479043f1d9c..092a888e7f12511417910970c25150cd9399e0ad 100644 GIT binary patch delta 201 zcmZ3;w2;Zb#WTp6fq{Vuh?&C!Bs+mL1B_;5U|?aGl&H(V(D;^tf$=L)N@SvejtWd3 zMnl!<0o5&mt7}lP2@gmzhL{JTA?l8wLRJTq*FG-AdO1P$1e<48$(7vN$h=KPQ;$r1 xAgOVA+vb+GZwgzt8m%~!$2enkjeXFQ4L$4Ae-^Ix*lCyf^zTFF<@zxlTmXG~IDY^D delta 201 zcmZ3;w2;Zb#WTp6fq{Vuh?zrG4mxnSi`m0y28Mr(3=QH>7#JGg0;OMo@I(V06_`AX zhN^oCRJR1Ku0h2nEW}er`ool( zoR0*0t@u0EzQeONc=T4crNi}8+kL5H{l-h`?FN%|HUu)L;jDw!>Y&HnkbgauG#Lqwk-g~CGUx|4 z@jQ`FGpcm-wQcau1zxS>x-_`&xjdKL*Mn}{$^(o?A7hAigsYBPtCOC0UHUHt$rT17{(bW0fk literal 0 HcmV?d00001 diff --git a/tests/resources/diff_format_email/.gitted/objects/53/525d4cc3ef3ba4a5cbf69492fdffb4e4a74558 b/tests/resources/diff_format_email/.gitted/objects/53/525d4cc3ef3ba4a5cbf69492fdffb4e4a74558 new file mode 100644 index 0000000000000000000000000000000000000000..b74d31f4f1d8b4ae6a3ae955128e121bd926b281 GIT binary patch literal 121 zcmV-<0EYi~0V^p=O;s>7v}77v}7*WO16KtMYC0BB5Bl9*HO+5ktn*T7&>Ww*W literal 0 HcmV?d00001 diff --git a/tests/resources/diff_format_email/.gitted/refs/heads/master b/tests/resources/diff_format_email/.gitted/refs/heads/master index 3bc734d47e12a04ef622aa7855856122b87535c2..4024b97cd8e8887f12db0472b802e65fbdbc37a6 100644 GIT binary patch literal 41 ucmV~$!4Uu;2m`Rc+rVjS$DyM8k6^MgWO2`@Qa0T@USOe78Ghb?c*h6ma|;{* literal 41 ucmV~$!4Uu;2m`Rc(;y0EopRLuM=(i;pzTwTfps1yI{VQ>mEv56!`27!$qQis diff --git a/tests/resources/diff_format_email/file3.txt b/tests/resources/diff_format_email/file3.txt index 7309653445ecf038d3e3dd9ed55edb6cb541a4ba..c71a05d36025c806496a74d46d7d596eb23295c4 100644 GIT binary patch delta 7 OcmY$@o}fBWo(%v8X92tb delta 4 LcmdN^ouCQ;0%QRO