summaryrefslogtreecommitdiff
path: root/src/diff.c
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2014-04-22 12:33:27 -0700
committerRussell Belfer <rb@github.com>2014-04-22 12:33:27 -0700
commit8d09efa24ee01e9e4b14672978bfd1bb1ca2436a (patch)
treed68210d412062a84d73a60ddb01a7a2501af0b29 /src/diff.c
parent12e422a0562de2aebb05f5f414dbcde7caf85886 (diff)
downloadlibgit2-8d09efa24ee01e9e4b14672978bfd1bb1ca2436a.tar.gz
Use git_diff_get_stats in example/diff + refactor
This takes the `--stat` and related example options in the example diff.c program and converts them to use the `git_diff_get_stats` API which nicely formats stats for you. I went to add bar-graph scaling to the stats formatter and noticed that the `git_diff_stats` structure was holding on to all of the `git_patch` objects. Unfortunately, each of these objects keeps the full text of the diff in memory, so this is very expensive. I ended up modifying `git_diff_stats` to keep just the data that it needs to keep and allowed it to release the patches. Then, I added width scaling to the output on top of that. In making the diff example program match 'git diff' output, I ended up removing an newline from the sumamry output which I then had to compensate for in the email formatting to match the expectations. Lastly, I went through and refactored the tests to use a couple of helper functions and reduce the overall amount of code there.
Diffstat (limited to 'src/diff.c')
-rw-r--r--src/diff.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/diff.c b/src/diff.c
index 0d1aed4ad..fd881c6f6 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1590,7 +1590,8 @@ int git_diff_format_email(
if ((error = git_buf_puts(out, "---\n")) < 0 ||
(error = git_diff_get_stats(&stats, diff)) < 0 ||
- (error = git_diff_stats_to_buf(out, stats, format_flags)) < 0 ||
+ (error = git_diff_stats_to_buf(out, stats, format_flags, 0)) < 0 ||
+ (error = git_buf_putc(out, '\n')) < 0 ||
(error = git_diff_format_email__append_patches_tobuf(out, diff)) < 0)
goto on_error;