From: Thomas Gummerer <t.gummerer@gmail.com> To: git@vger.kernel.org Cc: trast@inf.ethz.ch, mhagger@alum.mit.edu, gitster@pobox.com, pclouds@gmail.com, robin.rosenberg@dewire.com, t.gummerer@gmail.com Subject: [PATCH 10/22] grep.c: Use index api Date: Sun, 7 Jul 2013 10:11:48 +0200 Message-ID: <1373184720-29767-11-git-send-email-t.gummerer@gmail.com> (raw) In-Reply-To: <1373184720-29767-1-git-send-email-t.gummerer@gmail.com> Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com> --- builtin/grep.c | 71 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/builtin/grep.c b/builtin/grep.c index a419cda..2a1c8f4 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -368,41 +368,33 @@ static void run_pager(struct grep_opt *opt, const char *prefix) free(argv); } -static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int cached) +struct grep_opts { + struct grep_opt *opt; + const struct pathspec *pathspec; + int cached; + int hit; +}; + +static int grep_cache(struct cache_entry *ce, void *cb_data) { - int hit = 0; - int nr; - read_cache(); + struct grep_opts *opts = cb_data; - for (nr = 0; nr < active_nr; nr++) { - struct cache_entry *ce = active_cache[nr]; - if (!S_ISREG(ce->ce_mode)) - continue; - if (!match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL)) - continue; - /* - * If CE_VALID is on, we assume worktree file and its cache entry - * are identical, even if worktree file has been modified, so use - * cache version instead - */ - if (cached || (ce->ce_flags & CE_VALID) || ce_skip_worktree(ce)) { - if (ce_stage(ce)) - continue; - hit |= grep_sha1(opt, ce->sha1, ce->name, 0, 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 */ - } - if (hit && opt->status_only) - break; - } - return hit; + if (!S_ISREG(ce->ce_mode)) + return 0; + if (!match_pathspec_depth(opts->pathspec, ce->name, ce_namelen(ce), 0, NULL)) + return 0; + /* + * If CE_VALID is on, we assume worktree file and its cache entry + * are identical, even if worktree file has been modified, so use + * cache version instead + */ + if (opts->cached || (ce->ce_flags & CE_VALID) || ce_skip_worktree(ce)) + opts->hit |= grep_sha1(opts->opt, ce->sha1, ce->name, 0, ce->name); + else + opts->hit |= grep_file(opts->opt, ce->name); + if (opts->hit && opts->opt->status_only) + return 1; + return 0; } static int grep_tree(struct grep_opt *opt, const struct pathspec *pathspec, @@ -895,10 +887,21 @@ int cmd_grep(int argc, const char **argv, const char *prefix) } else if (0 <= opt_exclude) { die(_("--[no-]exclude-standard cannot be used for tracked contents.")); } else if (!list.nr) { + struct grep_opts opts; + struct filter_opts *filter_opts = xmalloc(sizeof(*filter_opts)); + if (!cached) setup_work_tree(); - hit = grep_cache(&opt, &pathspec, cached); + memset(filter_opts, 0, sizeof(*filter_opts)); + filter_opts->pathspec = pathspec.raw; + opts.opt = &opt; + opts.pathspec = &pathspec; + opts.cached = cached; + opts.hit = 0; + read_cache_filtered(filter_opts); + for_each_cache_entry(grep_cache, &opts); + hit = opts.hit; } else { if (cached) die(_("both --cached and trees are given.")); -- 1.8.3.453.g1dfc63d
next prev parent reply other threads:[~2013-07-07 8:13 UTC|newest] Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-07-07 8:11 [PATCH 00/22] Index v5 Thomas Gummerer 2013-07-07 8:11 ` [PATCH 01/22] t2104: Don't fail for index versions other than [23] Thomas Gummerer 2013-07-07 8:11 ` [PATCH 02/22] read-cache: split index file version specific functionality Thomas Gummerer 2013-07-07 8:11 ` [PATCH 03/22] read-cache: move index v2 specific functions to their own file Thomas Gummerer 2013-07-07 8:11 ` [PATCH 04/22] read-cache: Re-read index if index file changed Thomas Gummerer 2013-07-07 8:11 ` [PATCH 05/22] read-cache: add index reading api Thomas Gummerer 2013-07-08 2:01 ` Duy Nguyen 2013-07-08 11:40 ` Thomas Gummerer 2013-07-08 2:19 ` Duy Nguyen 2013-07-08 11:20 ` Thomas Gummerer 2013-07-08 12:45 ` Duy Nguyen 2013-07-08 13:37 ` Thomas Gummerer 2013-07-08 20:54 ` [PATCH 5.5/22] Add documentation for the index api Thomas Gummerer 2013-07-09 15:42 ` Duy Nguyen 2013-07-09 20:10 ` Thomas Gummerer 2013-07-10 5:28 ` Duy Nguyen 2013-07-11 11:30 ` Thomas Gummerer 2013-07-11 11:42 ` Duy Nguyen 2013-07-11 12:27 ` Duy Nguyen 2013-07-08 16:36 ` [PATCH 05/22] read-cache: add index reading api Junio C Hamano 2013-07-08 20:10 ` Thomas Gummerer 2013-07-08 23:09 ` Junio C Hamano 2013-07-09 20:13 ` Thomas Gummerer 2013-07-07 8:11 ` [PATCH 06/22] make sure partially read index is not changed Thomas Gummerer 2013-07-08 16:31 ` Junio C Hamano 2013-07-08 18:33 ` Thomas Gummerer 2013-07-07 8:11 ` [PATCH 07/22] dir.c: use index api Thomas Gummerer 2013-07-07 8:11 ` [PATCH 08/22] tree.c: " Thomas Gummerer 2013-07-07 8:11 ` [PATCH 09/22] name-hash.c: " Thomas Gummerer 2013-07-07 8:11 ` Thomas Gummerer [this message] 2013-07-07 8:11 ` [PATCH 11/22] ls-files.c: use the " Thomas Gummerer 2013-07-07 8:11 ` [PATCH 12/22] read-cache: make read_blob_data_from_index use " Thomas Gummerer 2013-07-07 8:11 ` [PATCH 13/22] documentation: add documentation of the index-v5 file format Thomas Gummerer 2013-07-11 10:39 ` Duy Nguyen 2013-07-11 11:39 ` Thomas Gummerer 2013-07-11 11:47 ` Duy Nguyen 2013-07-11 12:26 ` Thomas Gummerer 2013-07-11 12:50 ` Duy Nguyen 2013-07-07 8:11 ` [PATCH 14/22] read-cache: make in-memory format aware of stat_crc Thomas Gummerer 2013-07-07 8:11 ` [PATCH 15/22] read-cache: read index-v5 Thomas Gummerer 2013-07-07 20:18 ` Eric Sunshine 2013-07-08 11:40 ` Thomas Gummerer 2013-07-07 8:11 ` [PATCH 16/22] read-cache: read resolve-undo data Thomas Gummerer 2013-07-07 8:11 ` [PATCH 17/22] read-cache: read cache-tree in index-v5 Thomas Gummerer 2013-07-07 20:41 ` Eric Sunshine 2013-07-07 8:11 ` [PATCH 18/22] read-cache: write index-v5 Thomas Gummerer 2013-07-07 20:43 ` Eric Sunshine 2013-07-07 8:11 ` [PATCH 19/22] read-cache: write index-v5 cache-tree data Thomas Gummerer 2013-07-07 8:11 ` [PATCH 20/22] read-cache: write resolve-undo data for index-v5 Thomas Gummerer 2013-07-07 8:11 ` [PATCH 21/22] update-index.c: rewrite index when index-version is given Thomas Gummerer 2013-07-07 8:12 ` [PATCH 22/22] p0003-index.sh: add perf test for the index formats Thomas Gummerer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1373184720-29767-11-git-send-email-t.gummerer@gmail.com \ --to=t.gummerer@gmail.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=mhagger@alum.mit.edu \ --cc=pclouds@gmail.com \ --cc=robin.rosenberg@dewire.com \ --cc=trast@inf.ethz.ch \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
git@vger.kernel.org list mirror (unofficial, one of many) This inbox may be cloned and mirrored by anyone: git clone --mirror https://public-inbox.org/git git clone --mirror http://ou63pmih66umazou.onion/git git clone --mirror http://czquwvybam4bgbro.onion/git git clone --mirror http://hjrcffqmbrq6wope.onion/git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V1 git git/ https://public-inbox.org/git \ git@vger.kernel.org public-inbox-index git Example config snippet for mirrors. Newsgroups are available over NNTP: nntp://news.public-inbox.org/inbox.comp.version-control.git nntp://ou63pmih66umazou.onion/inbox.comp.version-control.git nntp://czquwvybam4bgbro.onion/inbox.comp.version-control.git nntp://hjrcffqmbrq6wope.onion/inbox.comp.version-control.git nntp://news.gmane.io/gmane.comp.version-control.git note: .onion URLs require Tor: https://www.torproject.org/ code repositories for the project(s) associated with this inbox: https://80x24.org/mirrors/git.git AGPL code for this site: git clone https://public-inbox.org/public-inbox.git