diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-02-21 15:00:33 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-02-21 15:00:33 -0800 |
commit | a67c23544888761e940452f7533953b3c368456f (patch) | |
tree | cd673c7945c8a757a928304f5f25b5788e057d0f /diff.c | |
parent | c17ff2a36160ae51a1cefa9fe8f067dbeb33e884 (diff) | |
parent | 2eeeef24ff5a6538f41f5fe44f3a4e7f6e36e7e5 (diff) | |
download | git-a67c23544888761e940452f7533953b3c368456f.tar.gz |
Merge branch 'jc/diff-stat-scaler' into maint
* jc/diff-stat-scaler:
diff --stat: show bars of same length for paths with same amount of changes
Diffstat (limited to 'diff.c')
-rw-r--r-- | diff.c | 27 |
1 files changed, 20 insertions, 7 deletions
@@ -1276,13 +1276,15 @@ const char mime_boundary_leader[] = "------------"; static int scale_linear(int it, int width, int max_change) { + if (!it) + return 0; /* - * make sure that at least one '-' is printed if there were deletions, - * and likewise for '+'. + * make sure that at least one '-' or '+' is printed if + * there is any change to this path. The easiest way is to + * scale linearly as if the alloted width is one column shorter + * than it is, and then add 1 to the result. */ - if (max_change < 2) - return it; - return ((it - 1) * (width - 1) + max_change - 1) / (max_change - 1); + return 1 + (it * (width - 1) / max_change); } static void show_name(FILE *file, @@ -1498,8 +1500,19 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) dels += del; if (width <= max_change) { - add = scale_linear(add, width, max_change); - del = scale_linear(del, width, max_change); + int total = add + del; + + total = scale_linear(add + del, width, max_change); + if (total < 2 && add && del) + /* width >= 2 due to the sanity check */ + total = 2; + if (add < del) { + add = scale_linear(add, width, max_change); + del = total - add; + } else { + del = scale_linear(del, width, max_change); + add = total - del; + } } fprintf(options->file, "%s", line_prefix); show_name(options->file, prefix, name, len); |