Browse Source

Unify code paths of threaded greps

There were three awfully similar code paths ending the threaded grep. It
is better to avoid duplicated code, though.

This change might very well prevent a race, where the grep patterns were
free()d before waiting that all threads finished.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Schindelin 15 years ago committed by Junio C Hamano
parent
commit
685359cf2d
  1. 22
      builtin/grep.c

22
builtin/grep.c

@ -590,7 +590,6 @@ static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
if (hit && opt->status_only) if (hit && opt->status_only)
break; break;
} }
free_grep_patterns(opt);
return hit; return hit;
} }


@ -708,7 +707,6 @@ static int grep_directory(struct grep_opt *opt, const char **paths)
if (hit && opt->status_only) if (hit && opt->status_only)
break; break;
} }
free_grep_patterns(opt);
return hit; return hit;
} }


@ -1019,32 +1017,22 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
} }


if (!use_index) { if (!use_index) {
int hit;
if (cached) if (cached)
die("--cached cannot be used with --no-index."); die("--cached cannot be used with --no-index.");
if (list.nr) if (list.nr)
die("--no-index cannot be used with revs."); die("--no-index cannot be used with revs.");
hit = grep_directory(&opt, paths); hit = grep_directory(&opt, paths);
if (use_threads) } else if (!list.nr) {
hit |= wait_all();
return !hit;
}

if (!list.nr) {
int hit;
if (!cached) if (!cached)
setup_work_tree(); setup_work_tree();


hit = grep_cache(&opt, paths, cached); hit = grep_cache(&opt, paths, cached);
if (use_threads) } else {
hit |= wait_all(); if (cached)
return !hit; die("both --cached and trees are given.");
hit = grep_objects(&opt, paths, &list);
} }


if (cached)
die("both --cached and trees are given.");
hit = grep_objects(&opt, paths, &list);

if (use_threads) if (use_threads)
hit |= wait_all(); hit |= wait_all();
free_grep_patterns(&opt); free_grep_patterns(&opt);

Loading…
Cancel
Save