mirror of
https://git.proxmox.com/git/libgit2
synced 2025-07-09 09:44:43 +00:00
add example for diff with --numstat
This commit is contained in:
parent
f1590a18b0
commit
4f5a3f400b
@ -39,6 +39,7 @@ struct opts {
|
||||
git_diff_find_options findopts;
|
||||
int color;
|
||||
int cached;
|
||||
int numstat;
|
||||
git_diff_format_t format;
|
||||
const char *treeish1;
|
||||
const char *treeish2;
|
||||
@ -49,6 +50,7 @@ struct opts {
|
||||
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);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
@ -57,7 +59,7 @@ int main(int argc, char *argv[])
|
||||
git_diff *diff;
|
||||
struct opts o = {
|
||||
GIT_DIFF_OPTIONS_INIT, GIT_DIFF_FIND_OPTIONS_INIT,
|
||||
-1, 0, GIT_DIFF_FORMAT_PATCH, NULL, NULL, "."
|
||||
-1, 0, 0, GIT_DIFF_FORMAT_PATCH, NULL, NULL, "."
|
||||
};
|
||||
|
||||
git_threads_init();
|
||||
@ -117,15 +119,19 @@ int main(int argc, char *argv[])
|
||||
|
||||
/** Generate simple output using libgit2 display helper. */
|
||||
|
||||
if (o.color >= 0)
|
||||
fputs(colors[0], stdout);
|
||||
if (o.numstat == 1)
|
||||
diff_print_numstat(diff);
|
||||
else {
|
||||
if (o.color >= 0)
|
||||
fputs(colors[0], stdout);
|
||||
|
||||
check_lg2(
|
||||
git_diff_print(diff, o.format, color_printer, &o.color),
|
||||
"displaying diff", NULL);
|
||||
check_lg2(
|
||||
git_diff_print(diff, o.format, color_printer, &o.color),
|
||||
"displaying diff", NULL);
|
||||
|
||||
if (o.color >= 0)
|
||||
fputs(colors[0], stdout);
|
||||
if (o.color >= 0)
|
||||
fputs(colors[0], stdout);
|
||||
}
|
||||
|
||||
/** Cleanup before exiting. */
|
||||
|
||||
@ -228,6 +234,8 @@ static void parse_opts(struct opts *o, int argc, char *argv[])
|
||||
o->diffopts.flags |= GIT_DIFF_INCLUDE_IGNORED;
|
||||
else if (!strcmp(a, "--untracked"))
|
||||
o->diffopts.flags |= GIT_DIFF_INCLUDE_UNTRACKED;
|
||||
else if (!strcmp(a, "--numstat"))
|
||||
o->numstat = 1;
|
||||
else if (match_uint16_arg(
|
||||
&o->findopts.rename_threshold, &args, "-M") ||
|
||||
match_uint16_arg(
|
||||
@ -255,3 +263,25 @@ static void parse_opts(struct opts *o, int argc, char *argv[])
|
||||
usage("Unknown command line argument", a);
|
||||
}
|
||||
}
|
||||
|
||||
/** Display diff output with "--numstat".*/
|
||||
static void diff_print_numstat(git_diff *diff)
|
||||
{
|
||||
git_patch *out;
|
||||
const git_diff_delta *delta;
|
||||
size_t i;
|
||||
size_t ndeltas;
|
||||
size_t nadditions, ndeletions;
|
||||
ndeltas = git_diff_num_deltas(diff);
|
||||
for (i = 0; i < ndeltas; i++){
|
||||
check_lg2(
|
||||
git_patch_from_diff(&out, diff, i),
|
||||
"generating patch from diff", NULL);
|
||||
check_lg2(
|
||||
git_patch_line_stats(NULL, &nadditions, &ndeletions, out),
|
||||
"generating the number of additions and deletions", NULL);
|
||||
delta = git_patch_get_delta(out);
|
||||
printf("%u %u %s\n", nadditions, ndeletions, delta->new_file.path);
|
||||
}
|
||||
git_patch_free(out);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user