Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
grep: do not skip unmerged entries when grepping in the working tree.
author
Junio C Hamano
<junkio@cox.net>
Sun, 26 Nov 2006 20:47:52 +0000
(12:47 -0800)
committer
Junio C Hamano
<junkio@cox.net>
Sun, 26 Nov 2006 22:22:01 +0000
(14:22 -0800)
We used to skip unmerged entries, which made sense for grepping
in the cached copies, but not for grepping in the working tree.
Noticed by Johannes Sixt.
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-grep.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
aabd769
)
diff --git
a/builtin-grep.c
b/builtin-grep.c
index ad7dc00cde4e8e08ef35b313525781c135357df3..9873e3d1dbf0e8735641cc178d687a9d5194487e 100644
(file)
--- a/
builtin-grep.c
+++ b/
builtin-grep.c
@@
-268,7
+268,7
@@
static int external_grep(struct grep_opt *opt, const char **paths, int cached)
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
char *name;
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
char *name;
- if (
ce_stage(ce) ||
!S_ISREG(ntohl(ce->ce_mode)))
+ if (!S_ISREG(ntohl(ce->ce_mode)))
continue;
if (!pathspec_matches(paths, ce->name))
continue;
continue;
if (!pathspec_matches(paths, ce->name))
continue;
@@
-280,12
+280,19
@@
static int external_grep(struct grep_opt *opt, const char **paths, int cached)
memcpy(name + 2, ce->name, len + 1);
}
argv[argc++] = name;
memcpy(name + 2, ce->name, len + 1);
}
argv[argc++] = name;
- if (argc < MAXARGS)
+ if (argc < MAXARGS
&& !ce_stage(ce)
)
continue;
status = exec_grep(argc, argv);
if (0 < status)
hit = 1;
argc = nr;
continue;
status = exec_grep(argc, argv);
if (0 < status)
hit = 1;
argc = nr;
+ if (ce_stage(ce)) {
+ do {
+ i++;
+ } while (i < active_nr &&
+ !strcmp(ce->name, active_cache[i]->name));
+ i--; /* compensate for loop control */
+ }
}
if (argc > nr) {
status = exec_grep(argc, argv);
}
if (argc > nr) {
status = exec_grep(argc, argv);
@@
-316,14
+323,24
@@
static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
for (nr = 0; nr < active_nr; nr++) {
struct cache_entry *ce = active_cache[nr];
for (nr = 0; nr < active_nr; nr++) {
struct cache_entry *ce = active_cache[nr];
- if (
ce_stage(ce) ||
!S_ISREG(ntohl(ce->ce_mode)))
+ if (!S_ISREG(ntohl(ce->ce_mode)))
continue;
if (!pathspec_matches(paths, ce->name))
continue;
continue;
if (!pathspec_matches(paths, ce->name))
continue;
- if (cached)
+ if (cached) {
+ if (ce_stage(ce))
+ continue;
hit |= grep_sha1(opt, ce->sha1, ce->name, 0);
hit |= grep_sha1(opt, ce->sha1, ce->name, 0);
+ }
else
hit |= grep_file(opt, ce->name);
else
hit |= grep_file(opt, ce->name);
+ if (ce_stage(ce)) {
+ do {
+ nr++;
+ } while (nr < active_nr &&
+ !strcmp(ce->name, active_cache[nr]->name));
+ nr--; /* compensate for loop control */
+ }
}
free_grep_patterns(opt);
return hit;
}
free_grep_patterns(opt);
return hit;