@matheusbsbs / matheus-bagliano / commits / 57d43466fb
Fork 0

grep: grep cache entries if they are "assume unchanged"

"Assume unchanged" bit means "please pretend that I have never touched this file", so if user removes the file, we should not care. This patch teaches "git grep" to use cache version in such situations. External grep case has not been fixed yet. But given that on the platform that CE_VALID bit may be used like Windows, external grep is not available anyway, I would wait for people to raise their hands before touching it. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Nguyễn Thái Ngọc Duy committed Dec 27, 2008 at 15:21 UTC 57d43466fbb4ffb4106b97593a96d714137dde2a
2 files changed +13 -1
builtin-grep.c
+6 -1
@@ -404,7 +404,12 @@ static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
404 continue;
405 if (!pathspec_matches(paths, ce->name))
406 continue;
407 - if (cached) {
407 + /*
408 + * If CE_VALID is on, we assume worktree file and its cache entry
409 + * are identical, even if worktree file has been modified, so use
410 + * cache version instead
411 + */
412 + if (cached || (ce->ce_flags & CE_VALID)) {
413 if (ce_stage(ce))
414 continue;
415 hit |= grep_sha1(opt, ce->sha1, ce->name, 0);
t/t7002-grep.sh
+7
@@ -161,7 +161,14 @@ test_expect_success 'log grep (6)' '
161 git log --author=-0700 --pretty=tformat:%s >actual &&
162 >expect &&
163 test_cmp expect actual
164 +'
165
166 +test_expect_success 'grep with CE_VALID file' '
167 + git update-index --assume-unchanged t/t &&
168 + rm t/t &&
169 + test "$(git grep --no-ext-grep t)" = "t/t:test" &&
170 + git update-index --no-assume-unchanged t/t &&
171 + git checkout t/t
172 '
173
174 test_done