Commit 161e6dc1 by Eoin Coffey

Add --committer option, and break out helper function

parent 97fc71ab
...@@ -44,6 +44,7 @@ struct log_state { ...@@ -44,6 +44,7 @@ struct log_state {
/** utility functions that are called to configure the walker */ /** utility functions that are called to configure the walker */
static void set_sorting(struct log_state *s, unsigned int sort_mode); 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 void push_rev(struct log_state *s, git_object *obj, int hide);
static int add_revision(struct log_state *s, const char *revstr); static int add_revision(struct log_state *s, const char *revstr);
...@@ -55,7 +56,7 @@ struct log_options { ...@@ -55,7 +56,7 @@ struct log_options {
git_time_t before; git_time_t before;
git_time_t after; git_time_t after;
const char *author; const char *author;
char *committer; const char *committer;
}; };
/** utility functions that parse options and help with log output */ /** utility functions that parse options and help with log output */
...@@ -75,7 +76,6 @@ int main(int argc, char *argv[]) ...@@ -75,7 +76,6 @@ int main(int argc, char *argv[])
git_oid oid; git_oid oid;
git_commit *commit = NULL; git_commit *commit = NULL;
git_pathspec *ps = NULL; git_pathspec *ps = NULL;
const git_signature *sig;
git_threads_init(); git_threads_init();
...@@ -129,11 +129,11 @@ int main(int argc, char *argv[]) ...@@ -129,11 +129,11 @@ int main(int argc, char *argv[])
continue; continue;
} }
if (opt.author != NULL) { if (signature_does_not_match(git_commit_author(commit), opt.author))
if ((sig = git_commit_author(commit)) == NULL || continue;
strstr(sig->name, opt.author) == NULL)
if (signature_does_not_match(git_commit_committer(commit), opt.committer))
continue; continue;
}
if (count++ < opt.skip) if (count++ < opt.skip)
continue; continue;
...@@ -179,6 +179,18 @@ int main(int argc, char *argv[]) ...@@ -179,6 +179,18 @@ int main(int argc, char *argv[])
return 0; 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. */ /** Push object (for hide or show) onto revwalker. */
static void push_rev(struct log_state *s, git_object *obj, int hide) static void push_rev(struct log_state *s, git_object *obj, int hide)
{ {
...@@ -410,6 +422,8 @@ static int parse_options( ...@@ -410,6 +422,8 @@ static int parse_options(
set_sorting(s, GIT_SORT_REVERSE); set_sorting(s, GIT_SORT_REVERSE);
else if (match_str_arg(&opt->author, &args, "--author")) else if (match_str_arg(&opt->author, &args, "--author"))
/** Found valid --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")) else if (match_str_arg(&s->repodir, &args, "--git-dir"))
/** Found git-dir. */; /** Found git-dir. */;
else if (match_int_arg(&opt->skip, &args, "--skip", 0)) else if (match_int_arg(&opt->skip, &args, "--skip", 0))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment