Skip to content

Commit

Permalink
Merge pull request libgit2#2162 from sunheehnus/dev
Browse files Browse the repository at this point in the history
examples/diff:Add the shortstat flag to examples/diff.c
  • Loading branch information
ben committed Mar 6, 2014
2 parents a064dc2 + 6246de9 commit a513948
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 3 deletions.
2 changes: 0 additions & 2 deletions PROJECTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ These are good small projects to get started with libgit2.
core Git command and add a missing command-line option. There are many
gaps right now and this helps demonstrate how to use the library. Here
are some specific ideas:
* Add the `--shortstat` flag to `examples/diff.c` based on the work
that was done to add `--numstat` already.
* Fix the `examples/diff.c` implementation of the `-B`
(a.k.a. `--break-rewrites`) command line option to actually look for
the optional `[<n>][/<m>]` configuration values. There is an
Expand Down
52 changes: 51 additions & 1 deletion examples/diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ struct opts {
int color;
int cached;
int numstat;
int shortstat;
git_diff_format_t format;
const char *treeish1;
const char *treeish2;
Expand All @@ -51,6 +52,7 @@ static void parse_opts(struct opts *o, int argc, char *argv[]);
static int color_printer(
const git_diff_delta*, const git_diff_hunk*, const git_diff_line*, void*);
static void diff_print_numstat(git_diff *diff);
static void diff_print_shortstat(git_diff *diff);

int main(int argc, char *argv[])
{
Expand All @@ -59,7 +61,7 @@ int main(int argc, char *argv[])
git_diff *diff;
struct opts o = {
GIT_DIFF_OPTIONS_INIT, GIT_DIFF_FIND_OPTIONS_INIT,
-1, 0, 0, GIT_DIFF_FORMAT_PATCH, NULL, NULL, "."
-1, 0, 0, 0, GIT_DIFF_FORMAT_PATCH, NULL, NULL, "."
};

git_threads_init();
Expand Down Expand Up @@ -121,6 +123,8 @@ int main(int argc, char *argv[])

if (o.numstat == 1)
diff_print_numstat(diff);
else if (o.shortstat == 1)
diff_print_shortstat(diff);
else {
if (o.color >= 0)
fputs(colors[0], stdout);
Expand Down Expand Up @@ -240,6 +244,8 @@ static void parse_opts(struct opts *o, int argc, char *argv[])
o->diffopts.flags |= GIT_DIFF_MINIMAL;
else if (!strcmp(a, "--numstat"))
o->numstat = 1;
else if (!strcmp(a, "--shortstat"))
o->shortstat = 1;
else if (match_uint16_arg(
&o->findopts.rename_threshold, &args, "-M") ||
match_uint16_arg(
Expand Down Expand Up @@ -293,3 +299,47 @@ static void diff_print_numstat(git_diff *diff)
git_patch_free(patch);
}
}

/** Display diff output with "--shortstat".*/
static void diff_print_shortstat(git_diff *diff)
{
git_patch *patch;
size_t d, ndeltas = git_diff_num_deltas(diff);
size_t nadditions, ndeletions;
long nadditions_sum, ndeletions_sum;

nadditions_sum = 0;
ndeletions_sum = 0;

for (d = 0; d < ndeltas; d++){
check_lg2(
git_patch_from_diff(&patch, diff, d),
"generating patch from diff", NULL);

check_lg2(
git_patch_line_stats(NULL, &nadditions, &ndeletions, patch),
"generating the number of additions and deletions", NULL);

nadditions_sum += nadditions;
ndeletions_sum += ndeletions;

git_patch_free(patch);
}

if (ndeltas) {

printf(" %ld ", (long)ndeltas);
printf("%s", 1==ndeltas ? "file changed" : "files changed");

if(nadditions_sum) {
printf(", %ld ",nadditions_sum);
printf("%s", 1==nadditions_sum ? "insertion(+)" : "insertions(+)");
}

if(ndeletions_sum) {
printf(", %ld ",ndeletions_sum);
printf("%s", 1==ndeletions_sum ? "deletion(-)" : "deletions(-)");
}
printf("\n");
}
}

0 comments on commit a513948

Please sign in to comment.