diff options
author | Russell Belfer <rb@github.com> | 2014-04-22 12:33:27 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-04-22 12:33:27 -0700 |
commit | 8d09efa24ee01e9e4b14672978bfd1bb1ca2436a (patch) | |
tree | d68210d412062a84d73a60ddb01a7a2501af0b29 /src/diff.c | |
parent | 12e422a0562de2aebb05f5f414dbcde7caf85886 (diff) | |
download | libgit2-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.c | 3 |
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; |