git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 16/21] grep: convert to use struct pathspec
Date: Wed, 15 Dec 2010 22:02:51 +0700	[thread overview]
Message-ID: <1292425376-14550-17-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1292425376-14550-1-git-send-email-pclouds@gmail.com>


Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin/grep.c |   30 ++++++++++++++++--------------
 1 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/builtin/grep.c b/builtin/grep.c
index da32f3d..4179af8 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -585,7 +585,7 @@ static void run_pager(struct grep_opt *opt, const char *prefix)
 	free(argv);
 }
 
-static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
+static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int cached)
 {
 	int hit = 0;
 	int nr;
@@ -595,7 +595,7 @@ static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
 		struct cache_entry *ce = active_cache[nr];
 		if (!S_ISREG(ce->ce_mode))
 			continue;
-		if (!pathspec_matches(paths, ce->name, opt->max_depth))
+		if (!pathspec_matches(pathspec->raw, ce->name, opt->max_depth))
 			continue;
 		/*
 		 * If CE_VALID is on, we assume worktree file and its cache entry
@@ -622,7 +622,7 @@ static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
 	return hit;
 }
 
-static int grep_tree(struct grep_opt *opt, const char **paths,
+static int grep_tree(struct grep_opt *opt, const struct pathspec *pathspec,
 		     struct tree_desc *tree,
 		     const char *tree_name, const char *base)
 {
@@ -656,7 +656,7 @@ static int grep_tree(struct grep_opt *opt, const char **paths,
 			strbuf_addch(&pathbuf, '/');
 
 		down = pathbuf.buf + tn_len;
-		if (!pathspec_matches(paths, down, opt->max_depth))
+		if (!pathspec_matches(pathspec->raw, down, opt->max_depth))
 			;
 		else if (S_ISREG(entry.mode))
 			hit |= grep_sha1(opt, entry.sha1, pathbuf.buf, tn_len);
@@ -671,7 +671,7 @@ static int grep_tree(struct grep_opt *opt, const char **paths,
 				die("unable to read tree (%s)",
 				    sha1_to_hex(entry.sha1));
 			init_tree_desc(&sub, data, size);
-			hit |= grep_tree(opt, paths, &sub, tree_name, down);
+			hit |= grep_tree(opt, pathspec, &sub, tree_name, down);
 			free(data);
 		}
 		if (hit && opt->status_only)
@@ -681,7 +681,7 @@ static int grep_tree(struct grep_opt *opt, const char **paths,
 	return hit;
 }
 
-static int grep_object(struct grep_opt *opt, const char **paths,
+static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
 		       struct object *obj, const char *name)
 {
 	if (obj->type == OBJ_BLOB)
@@ -696,14 +696,14 @@ static int grep_object(struct grep_opt *opt, const char **paths,
 		if (!data)
 			die("unable to read tree (%s)", sha1_to_hex(obj->sha1));
 		init_tree_desc(&tree, data, size);
-		hit = grep_tree(opt, paths, &tree, name, "");
+		hit = grep_tree(opt, pathspec, &tree, name, "");
 		free(data);
 		return hit;
 	}
 	die("unable to grep from object of type %s", typename(obj->type));
 }
 
-static int grep_objects(struct grep_opt *opt, const char **paths,
+static int grep_objects(struct grep_opt *opt, const struct pathspec *pathspec,
 			const struct object_array *list)
 {
 	unsigned int i;
@@ -713,7 +713,7 @@ static int grep_objects(struct grep_opt *opt, const char **paths,
 	for (i = 0; i < nr; i++) {
 		struct object *real_obj;
 		real_obj = deref_tag(list->objects[i].item, NULL, 0);
-		if (grep_object(opt, paths, real_obj, list->objects[i].name)) {
+		if (grep_object(opt, pathspec, real_obj, list->objects[i].name)) {
 			hit = 1;
 			if (opt->status_only)
 				break;
@@ -722,7 +722,7 @@ static int grep_objects(struct grep_opt *opt, const char **paths,
 	return hit;
 }
 
-static int grep_directory(struct grep_opt *opt, const char **paths)
+static int grep_directory(struct grep_opt *opt, const struct pathspec *pathspec)
 {
 	struct dir_struct dir;
 	int i, hit = 0;
@@ -730,7 +730,7 @@ static int grep_directory(struct grep_opt *opt, const char **paths)
 	memset(&dir, 0, sizeof(dir));
 	setup_standard_excludes(&dir);
 
-	fill_directory(&dir, paths);
+	fill_directory(&dir, pathspec->raw);
 	for (i = 0; i < dir.nr; i++) {
 		hit |= grep_file(opt, dir.entries[i]->name);
 		if (hit && opt->status_only)
@@ -836,6 +836,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
 	struct grep_opt opt;
 	struct object_array list = OBJECT_ARRAY_INIT;
 	const char **paths = NULL;
+	struct pathspec pathspec;
 	struct string_list path_list = STRING_LIST_INIT_NODUP;
 	int i;
 	int dummy;
@@ -1063,6 +1064,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
 		paths[0] = prefix;
 		paths[1] = NULL;
 	}
+	init_pathspec(&pathspec, paths);
 
 	if (show_in_pager && (cached || list.nr))
 		die("--open-files-in-pager only works on the worktree");
@@ -1093,16 +1095,16 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
 			die("--cached cannot be used with --no-index.");
 		if (list.nr)
 			die("--no-index cannot be used with revs.");
-		hit = grep_directory(&opt, paths);
+		hit = grep_directory(&opt, &pathspec);
 	} else if (!list.nr) {
 		if (!cached)
 			setup_work_tree();
 
-		hit = grep_cache(&opt, paths, cached);
+		hit = grep_cache(&opt, &pathspec, cached);
 	} else {
 		if (cached)
 			die("both --cached and trees are given.");
-		hit = grep_objects(&opt, paths, &list);
+		hit = grep_objects(&opt, &pathspec, &list);
 	}
 
 	if (use_threads)
-- 
1.7.3.3.476.g10a82

  parent reply	other threads:[~2010-12-15 15:06 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-15 15:02 [PATCH 00/21] nd/struct-pathspec v2 Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 01/21] Add struct pathspec Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 02/21] diff-no-index: use diff_tree_setup_paths() Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 03/21] Convert struct diff_options to use struct pathspec Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 04/21] tree_entry_interesting(): remove dependency on struct diff_options Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 05/21] Move tree_entry_interesting() to tree-walk.c and export it Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 06/21] glossary: define pathspec Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 07/21] diff-tree: convert base+baselen to writable strbuf Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 08/21] tree_entry_interesting(): refactor into separate smaller functions Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 09/21] tree_entry_interesting(): support depth limit Nguyễn Thái Ngọc Duy
2011-01-28 20:40   ` Junio C Hamano
2011-01-29  3:13     ` Nguyen Thai Ngoc Duy
2011-01-31 20:21       ` [PATCH] tree_entry_interesting(): with no pathspecs, everything will match Junio C Hamano
2010-12-15 15:02 ` [PATCH 10/21] tree_entry_interesting(): fix depth limit with overlapping pathspecs Nguyễn Thái Ngọc Duy
2010-12-16 23:31   ` Junio C Hamano
2010-12-17 10:05     ` Nguyen Thai Ngoc Duy
2010-12-17 20:02       ` Junio C Hamano
2010-12-18  3:37     ` Nguyen Thai Ngoc Duy
2010-12-15 15:02 ` [PATCH 11/21] tree_entry_interesting(): support wildcard matching Nguyễn Thái Ngọc Duy
2019-02-04 10:36   ` [PATCH] diff-tree doc: correct & remove wrong documentation Ævar Arnfjörð Bjarmason
2019-02-04 10:42     ` Duy Nguyen
2019-02-04 21:10     ` Junio C Hamano
2019-02-04 21:49       ` Ævar Arnfjörð Bjarmason
2010-12-15 15:02 ` [PATCH 12/21] tree_entry_interesting(): optimize wildcard matching when base is matched Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 13/21] pathspec: add match_pathspec_depth() Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 14/21] Convert ce_path_match() to use struct pathspec Nguyễn Thái Ngọc Duy
2010-12-17  0:02   ` Junio C Hamano
2010-12-17  9:59     ` Nguyen Thai Ngoc Duy
2010-12-17 12:43       ` [PATCH 14/21] struct rev_info: convert prune_data to " Nguyễn Thái Ngọc Duy
2010-12-17 12:43         ` [PATCH 15/21] Convert ce_path_match() to use " Nguyễn Thái Ngọc Duy
2010-12-17 15:09       ` [PATCH 14/21] " Junio C Hamano
2010-12-17 15:11         ` Nguyen Thai Ngoc Duy
2010-12-17 20:29           ` Junio C Hamano
2010-12-15 15:02 ` [PATCH 15/21] Convert ce_path_match() to use match_pathspec_depth() Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` Nguyễn Thái Ngọc Duy [this message]
2010-12-15 15:02 ` [PATCH 17/21] grep: use match_pathspec_depth() for cache/worktree grepping Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 18/21] strbuf: allow "buf" to point to the middle of the allocated buffer Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 19/21] grep: use writable strbuf from caller in grep_tree() Nguyễn Thái Ngọc Duy
2010-12-17  0:15   ` Junio C Hamano
2010-12-17  9:56     ` Nguyen Thai Ngoc Duy
2010-12-17 12:44       ` [PATCH 19/21] grep: use writable strbuf from caller for grep_tree() Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 20/21] grep: drop pathspec_matches() in favor of tree_entry_interesting() Nguyễn Thái Ngọc Duy
2010-12-17 12:45   ` Nguyễn Thái Ngọc Duy
2010-12-15 15:02 ` [PATCH 21/21] t7810: overlapping pathspecs and depth limit Nguyễn Thái Ngọc Duy

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=1292425376-14550-17-git-send-email-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).