mirror of
https://git.proxmox.com/git/libgit2
synced 2025-07-09 16:06:40 +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;
|
git_diff_find_options findopts;
|
||||||
int color;
|
int color;
|
||||||
int cached;
|
int cached;
|
||||||
|
int numstat;
|
||||||
git_diff_format_t format;
|
git_diff_format_t format;
|
||||||
const char *treeish1;
|
const char *treeish1;
|
||||||
const char *treeish2;
|
const char *treeish2;
|
||||||
@ -49,6 +50,7 @@ struct opts {
|
|||||||
static void parse_opts(struct opts *o, int argc, char *argv[]);
|
static void parse_opts(struct opts *o, int argc, char *argv[]);
|
||||||
static int color_printer(
|
static int color_printer(
|
||||||
const git_diff_delta*, const git_diff_hunk*, const git_diff_line*, void*);
|
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[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -57,7 +59,7 @@ int main(int argc, char *argv[])
|
|||||||
git_diff *diff;
|
git_diff *diff;
|
||||||
struct opts o = {
|
struct opts o = {
|
||||||
GIT_DIFF_OPTIONS_INIT, GIT_DIFF_FIND_OPTIONS_INIT,
|
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();
|
git_threads_init();
|
||||||
@ -117,6 +119,9 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
/** Generate simple output using libgit2 display helper. */
|
/** Generate simple output using libgit2 display helper. */
|
||||||
|
|
||||||
|
if (o.numstat == 1)
|
||||||
|
diff_print_numstat(diff);
|
||||||
|
else {
|
||||||
if (o.color >= 0)
|
if (o.color >= 0)
|
||||||
fputs(colors[0], stdout);
|
fputs(colors[0], stdout);
|
||||||
|
|
||||||
@ -126,6 +131,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (o.color >= 0)
|
if (o.color >= 0)
|
||||||
fputs(colors[0], stdout);
|
fputs(colors[0], stdout);
|
||||||
|
}
|
||||||
|
|
||||||
/** Cleanup before exiting. */
|
/** 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;
|
o->diffopts.flags |= GIT_DIFF_INCLUDE_IGNORED;
|
||||||
else if (!strcmp(a, "--untracked"))
|
else if (!strcmp(a, "--untracked"))
|
||||||
o->diffopts.flags |= GIT_DIFF_INCLUDE_UNTRACKED;
|
o->diffopts.flags |= GIT_DIFF_INCLUDE_UNTRACKED;
|
||||||
|
else if (!strcmp(a, "--numstat"))
|
||||||
|
o->numstat = 1;
|
||||||
else if (match_uint16_arg(
|
else if (match_uint16_arg(
|
||||||
&o->findopts.rename_threshold, &args, "-M") ||
|
&o->findopts.rename_threshold, &args, "-M") ||
|
||||||
match_uint16_arg(
|
match_uint16_arg(
|
||||||
@ -255,3 +263,25 @@ static void parse_opts(struct opts *o, int argc, char *argv[])
|
|||||||
usage("Unknown command line argument", a);
|
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