Merge branch 'cj/log-invert-grep'
"git log --invert-grep --grep=WIP" will show only commits that do not have the string "WIP" in their messages. * cj/log-invert-grep: log: teach --invert-grep optionmaint
commit
1ba6e860b9
|
@ -66,6 +66,10 @@ if it is part of the log message.
|
||||||
Limit the commits output to ones that match all given `--grep`,
|
Limit the commits output to ones that match all given `--grep`,
|
||||||
instead of ones that match at least one.
|
instead of ones that match at least one.
|
||||||
|
|
||||||
|
--invert-grep::
|
||||||
|
Limit the commits output to ones with log message that do not
|
||||||
|
match the pattern specified with `--grep=<pattern>`.
|
||||||
|
|
||||||
-i::
|
-i::
|
||||||
--regexp-ignore-case::
|
--regexp-ignore-case::
|
||||||
Match the regular expression limiting patterns without regard to letter
|
Match the regular expression limiting patterns without regard to letter
|
||||||
|
|
|
@ -1425,7 +1425,7 @@ __git_log_gitk_options="
|
||||||
# Options that go well for log and shortlog (not gitk)
|
# Options that go well for log and shortlog (not gitk)
|
||||||
__git_log_shortlog_options="
|
__git_log_shortlog_options="
|
||||||
--author= --committer= --grep=
|
--author= --committer= --grep=
|
||||||
--all-match
|
--all-match --invert-grep
|
||||||
"
|
"
|
||||||
|
|
||||||
__git_log_pretty_formats="oneline short medium full fuller email raw format:"
|
__git_log_pretty_formats="oneline short medium full fuller email raw format:"
|
||||||
|
|
|
@ -2017,6 +2017,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
|
||||||
grep_set_pattern_type_option(GREP_PATTERN_TYPE_PCRE, &revs->grep_filter);
|
grep_set_pattern_type_option(GREP_PATTERN_TYPE_PCRE, &revs->grep_filter);
|
||||||
} else if (!strcmp(arg, "--all-match")) {
|
} else if (!strcmp(arg, "--all-match")) {
|
||||||
revs->grep_filter.all_match = 1;
|
revs->grep_filter.all_match = 1;
|
||||||
|
} else if (!strcmp(arg, "--invert-grep")) {
|
||||||
|
revs->invert_grep = 1;
|
||||||
} else if ((argcount = parse_long_opt("encoding", argv, &optarg))) {
|
} else if ((argcount = parse_long_opt("encoding", argv, &optarg))) {
|
||||||
if (strcmp(optarg, "none"))
|
if (strcmp(optarg, "none"))
|
||||||
git_log_output_encoding = xstrdup(optarg);
|
git_log_output_encoding = xstrdup(optarg);
|
||||||
|
@ -2915,7 +2917,7 @@ static int commit_match(struct commit *commit, struct rev_info *opt)
|
||||||
(char *)message, strlen(message));
|
(char *)message, strlen(message));
|
||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
unuse_commit_buffer(commit, message);
|
unuse_commit_buffer(commit, message);
|
||||||
return retval;
|
return opt->invert_grep ? !retval : retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int want_ancestry(const struct rev_info *revs)
|
static inline int want_ancestry(const struct rev_info *revs)
|
||||||
|
|
|
@ -169,6 +169,8 @@ struct rev_info {
|
||||||
|
|
||||||
/* Filter by commit log message */
|
/* Filter by commit log message */
|
||||||
struct grep_opt grep_filter;
|
struct grep_opt grep_filter;
|
||||||
|
/* Negate the match of grep_filter */
|
||||||
|
int invert_grep;
|
||||||
|
|
||||||
/* Display history graph */
|
/* Display history graph */
|
||||||
struct git_graph *graph;
|
struct git_graph *graph;
|
||||||
|
|
|
@ -212,6 +212,21 @@ test_expect_success 'log --grep' '
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
cat > expect << EOF
|
||||||
|
second
|
||||||
|
initial
|
||||||
|
EOF
|
||||||
|
test_expect_success 'log --invert-grep --grep' '
|
||||||
|
git log --pretty="tformat:%s" --invert-grep --grep=th --grep=Sec >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'log --invert-grep --grep -i' '
|
||||||
|
echo initial >expect &&
|
||||||
|
git log --pretty="tformat:%s" --invert-grep -i --grep=th --grep=Sec >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'log --grep option parsing' '
|
test_expect_success 'log --grep option parsing' '
|
||||||
echo second >expect &&
|
echo second >expect &&
|
||||||
git log -1 --pretty="tformat:%s" --grep sec >actual &&
|
git log -1 --pretty="tformat:%s" --grep sec >actual &&
|
||||||
|
|
Loading…
Reference in New Issue