diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2011-03-25 16:34:20 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-03-25 09:20:33 -0700 |
commit | 97d0b74a49f0c81c3f9673c1a17721ac0624c3df (patch) | |
tree | c4e7b7b6f2083cb9abf6a1cd7d97c0e693203744 /builtin/grep.c | |
parent | f0096c06bcdeb7aa6ae8a749ddc9d6d4a2c381d1 (diff) | |
download | git-97d0b74a49f0c81c3f9673c1a17721ac0624c3df.tar.gz git-97d0b74a49f0c81c3f9673c1a17721ac0624c3df.tar.xz |
Improve tree_entry_interesting() handling code
t_e_i() can return -1 or 2 to early shortcut a search. Current code
may use up to two variables to handle it. One for saving return value
from t_e_i temporarily, one for saving return code 2.
The second variable is not needed. If we make sure the first variable
does not change until the next t_e_i() call, then we can do something
like this:
int ret = 0;
while (...) {
if (ret != 2) {
ret = t_e_i();
if (ret < 0) /* no longer interesting */
break;
if (ret == 0) /* skip this round */
continue;
}
/* ret > 0, interesting */
}
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/grep.c')
-rw-r--r-- | builtin/grep.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/builtin/grep.c b/builtin/grep.c index c3af8760c..73b962f83 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -521,18 +521,18 @@ static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int static int grep_tree(struct grep_opt *opt, const struct pathspec *pathspec, struct tree_desc *tree, struct strbuf *base, int tn_len) { - int hit = 0, matched = 0; + int hit = 0, match = 0; struct name_entry entry; int old_baselen = base->len; while (tree_entry(tree, &entry)) { int te_len = tree_entry_len(entry.path, entry.sha1); - if (matched != 2) { - matched = tree_entry_interesting(&entry, base, tn_len, pathspec); - if (matched == -1) - break; /* no more matches */ - if (!matched) + if (match != 2) { + match = tree_entry_interesting(&entry, base, tn_len, pathspec); + if (match < 0) + break; + if (match == 0) continue; } |