diff options
author | Eoin Coffey <ecoffey@gmail.com> | 2014-05-23 12:27:16 -0600 |
---|---|---|
committer | Eoin Coffey <ecoffey@gmail.com> | 2014-05-23 12:27:16 -0600 |
commit | 161e6dc1cacb724543c81ee0a62ed28742a81190 (patch) | |
tree | 6bfefd48f20aabd326e652942ad23d32af5c3ca1 /examples/log.c | |
parent | 97fc71ab3b935df5f32faae13035e40eeb03c07f (diff) | |
download | libgit2-161e6dc1cacb724543c81ee0a62ed28742a81190.tar.gz |
Add --committer option, and break out helper function
Diffstat (limited to 'examples/log.c')
-rw-r--r-- | examples/log.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/examples/log.c b/examples/log.c index 655b95d10..5a43f632a 100644 --- a/examples/log.c +++ b/examples/log.c @@ -44,6 +44,7 @@ struct log_state { /** utility functions that are called to configure the walker */ static void set_sorting(struct log_state *s, unsigned int sort_mode); +static int signature_does_not_match(const git_signature *sig, const char *filter); static void push_rev(struct log_state *s, git_object *obj, int hide); static int add_revision(struct log_state *s, const char *revstr); @@ -55,7 +56,7 @@ struct log_options { git_time_t before; git_time_t after; const char *author; - char *committer; + const char *committer; }; /** utility functions that parse options and help with log output */ @@ -75,7 +76,6 @@ int main(int argc, char *argv[]) git_oid oid; git_commit *commit = NULL; git_pathspec *ps = NULL; - const git_signature *sig; git_threads_init(); @@ -129,11 +129,11 @@ int main(int argc, char *argv[]) continue; } - if (opt.author != NULL) { - if ((sig = git_commit_author(commit)) == NULL || - strstr(sig->name, opt.author) == NULL) - continue; - } + if (signature_does_not_match(git_commit_author(commit), opt.author)) + continue; + + if (signature_does_not_match(git_commit_committer(commit), opt.committer)) + continue; if (count++ < opt.skip) continue; @@ -179,6 +179,18 @@ int main(int argc, char *argv[]) return 0; } +/** Determine if the given git_signature does not contain the filter text. */ +static int signature_does_not_match(const git_signature *sig, const char *filter) { + if (filter == NULL) + return 0; + + if (sig == NULL || + (strstr(sig->name, filter) == NULL && + strstr(sig->email, filter) == NULL)) + return 1; + return 0; +} + /** Push object (for hide or show) onto revwalker. */ static void push_rev(struct log_state *s, git_object *obj, int hide) { @@ -410,6 +422,8 @@ static int parse_options( set_sorting(s, GIT_SORT_REVERSE); else if (match_str_arg(&opt->author, &args, "--author")) /** Found valid --author */; + else if (match_str_arg(&opt->committer, &args, "--committer")) + /** Found valid --committer */; else if (match_str_arg(&s->repodir, &args, "--git-dir")) /** Found git-dir. */; else if (match_int_arg(&opt->skip, &args, "--skip", 0)) |