Navigation Menu

Skip to content

Commit

Permalink
Merge branch 'rs/threaded-grep-context'
Browse files Browse the repository at this point in the history
* rs/threaded-grep-context:
  grep: enable threading for context line printing

Conflicts:
	grep.c
  • Loading branch information
gitster committed Apr 3, 2010
2 parents d718dd0 + 431d6e7 commit 07b838f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
15 changes: 13 additions & 2 deletions builtin/grep.c
Expand Up @@ -96,6 +96,9 @@ static pthread_cond_t cond_write;
/* Signalled when we are finished with everything. */
static pthread_cond_t cond_result;

static int print_hunk_marks_between_files;
static int printed_something;

static void add_work(enum work_type type, char *name, void *id)
{
grep_lock();
Expand Down Expand Up @@ -159,7 +162,12 @@ static void work_done(struct work_item *w)
for(; todo[todo_done].done && todo_done != todo_start;
todo_done = (todo_done+1) % ARRAY_SIZE(todo)) {
w = &todo[todo_done];
write_or_die(1, w->out.buf, w->out.len);
if (w->out.len) {
if (print_hunk_marks_between_files && printed_something)
write_or_die(1, "--\n", 3);
write_or_die(1, w->out.buf, w->out.len);
printed_something = 1;
}
free(w->name);
free(w->identifier);
}
Expand Down Expand Up @@ -946,8 +954,11 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
if (online_cpus() == 1 || !grep_threads_ok(&opt))
use_threads = 0;

if (use_threads)
if (use_threads) {
if (opt.pre_context || opt.post_context)
print_hunk_marks_between_files = 1;
start_threads(&opt);
}
#else
use_threads = 0;
#endif
Expand Down
18 changes: 6 additions & 12 deletions grep.c
Expand Up @@ -570,8 +570,7 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
if (opt->show_hunk_mark) {
output_color(opt, "--", 2, opt->color_sep);
opt->output(opt, "\n", 1);
} else
opt->show_hunk_mark = 1;
}
} else if (lno > opt->last_shown + 1) {
output_color(opt, "--", 2, opt->color_sep);
opt->output(opt, "\n", 1);
Expand Down Expand Up @@ -772,14 +771,6 @@ int grep_threads_ok(const struct grep_opt *opt)
!opt->name_only)
return 0;

/* If we are showing hunk marks, we should not do it for the
* first match. The synchronization problem we get for this
* constraint is not yet solved, so we disable threading in
* this case.
*/
if (opt->pre_context || opt->post_context)
return 0;

return 1;
}

Expand All @@ -801,11 +792,14 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name,
enum grep_context ctx = GREP_CONTEXT_HEAD;
xdemitconf_t xecfg;

opt->last_shown = 0;

if (!opt->output)
opt->output = std_output;

if (opt->last_shown && (opt->pre_context || opt->post_context) &&
opt->output == std_output)
opt->show_hunk_mark = 1;
opt->last_shown = 0;

if (buffer_is_binary(buf, size)) {
switch (opt->binary) {
case GREP_BINARY_DEFAULT:
Expand Down

0 comments on commit 07b838f

Please sign in to comment.