git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v3 24/31] Convert {read,fill}_directory to take struct pathspec
Date: Sun, 13 Jan 2013 19:35:32 +0700	[thread overview]
Message-ID: <1358080539-17436-25-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1358080539-17436-1-git-send-email-pclouds@gmail.com>


Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin/add.c      |  2 +-
 builtin/clean.c    |  2 +-
 builtin/grep.c     |  2 +-
 builtin/ls-files.c |  2 +-
 dir.c              | 16 +++++++++++-----
 dir.h              |  4 ++--
 wt-status.c        |  4 ++--
 7 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/builtin/add.c b/builtin/add.c
index 7069b77..dcea98f 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -397,7 +397,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 		}
 
 		/* This picks up the paths that are not tracked */
-		baselen = fill_directory(&dir, pathspec.raw);
+		baselen = fill_directory(&dir, &pathspec);
 		if (pathspec.nr)
 			seen = prune_directory(&dir, pathspec.raw, baselen);
 	}
diff --git a/builtin/clean.c b/builtin/clean.c
index fb0fe9a..1d8ff5f 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -102,7 +102,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
 
 	parse_pathspec(&pathspec, PATHSPEC_FROMTOP, 0, prefix, argv);
 
-	fill_directory(&dir, pathspec.raw);
+	fill_directory(&dir, &pathspec);
 
 	for (i = 0; i < dir.nr; i++) {
 		struct dir_entry *ent = dir.entries[i];
diff --git a/builtin/grep.c b/builtin/grep.c
index 705f9ff..f370bad 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -522,7 +522,7 @@ static int grep_directory(struct grep_opt *opt, const struct pathspec *pathspec,
 	if (exc_std)
 		setup_standard_excludes(&dir);
 
-	fill_directory(&dir, pathspec->raw);
+	fill_directory(&dir, pathspec);
 	for (i = 0; i < dir.nr; i++) {
 		const char *name = dir.entries[i]->name;
 		int namelen = strlen(name);
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 4bf3238..9655cc5 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -216,7 +216,7 @@ static void show_files(struct dir_struct *dir)
 
 	/* For cached/deleted files we don't need to even do the readdir */
 	if (show_others || show_killed) {
-		fill_directory(dir, pathspec.raw);
+		fill_directory(dir, &pathspec);
 		if (show_others)
 			show_other_files(dir);
 		if (show_killed)
diff --git a/dir.c b/dir.c
index 37280c8..6657b02 100644
--- a/dir.c
+++ b/dir.c
@@ -98,7 +98,7 @@ char *common_prefix(const char **pathspec)
 	return len ? xmemdupz(*pathspec, len) : NULL;
 }
 
-int fill_directory(struct dir_struct *dir, const char **pathspec)
+int fill_directory(struct dir_struct *dir, const struct pathspec *pathspec)
 {
 	size_t len;
 
@@ -106,10 +106,10 @@ int fill_directory(struct dir_struct *dir, const char **pathspec)
 	 * Calculate common prefix for the pathspec, and
 	 * use that to optimize the directory walk
 	 */
-	len = common_prefix_len(pathspec);
+	len = common_prefix_len(pathspec->raw);
 
 	/* Read the directory and prune it */
-	read_directory(dir, pathspec ? *pathspec : "", len, pathspec);
+	read_directory(dir, pathspec->nr ? pathspec->raw[0] : "", len, pathspec);
 	return len;
 }
 
@@ -1323,14 +1323,20 @@ static int treat_leading_path(struct dir_struct *dir,
 	return rc;
 }
 
-int read_directory(struct dir_struct *dir, const char *path, int len, const char **pathspec)
+int read_directory(struct dir_struct *dir, const char *path, int len, const struct pathspec *pathspec)
 {
 	struct path_simplify *simplify;
 
+	/*
+	 * Check out create_simplify()
+	 */
+	if (pathspec)
+		GUARD_PATHSPEC(pathspec, PATHSPEC_FROMTOP);
+
 	if (has_symlink_leading_path(path, len))
 		return dir->nr;
 
-	simplify = create_simplify(pathspec);
+	simplify = create_simplify(pathspec ? pathspec->raw : NULL);
 	if (!len || treat_leading_path(dir, path, len, simplify))
 		read_directory_recursive(dir, path, len, 0, simplify);
 	free_simplify(simplify);
diff --git a/dir.h b/dir.h
index 0cf5ccf..36bb4dd 100644
--- a/dir.h
+++ b/dir.h
@@ -97,8 +97,8 @@ extern int match_pathspec_depth(const struct pathspec *pathspec,
 				int prefix, char *seen);
 extern int within_depth(const char *name, int namelen, int depth, int max_depth);
 
-extern int fill_directory(struct dir_struct *dir, const char **pathspec);
-extern int read_directory(struct dir_struct *, const char *path, int len, const char **pathspec);
+extern int fill_directory(struct dir_struct *dir, const struct pathspec *pathspec);
+extern int read_directory(struct dir_struct *, const char *path, int len, const struct pathspec *pathspec);
 
 extern int is_excluded_from_list(const char *pathname, int pathlen, const char *basename,
 				 int *dtype, struct exclude_list *el);
diff --git a/wt-status.c b/wt-status.c
index 76edadc..c5b979e 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -502,7 +502,7 @@ static void wt_status_collect_untracked(struct wt_status *s)
 			DIR_SHOW_OTHER_DIRECTORIES | DIR_HIDE_EMPTY_DIRECTORIES;
 	setup_standard_excludes(&dir);
 
-	fill_directory(&dir, s->pathspec.raw);
+	fill_directory(&dir, &s->pathspec);
 	for (i = 0; i < dir.nr; i++) {
 		struct dir_entry *ent = dir.entries[i];
 		if (cache_name_is_other(ent->name, ent->len) &&
@@ -514,7 +514,7 @@ static void wt_status_collect_untracked(struct wt_status *s)
 	if (s->show_ignored_files) {
 		dir.nr = 0;
 		dir.flags = DIR_SHOW_IGNORED | DIR_SHOW_OTHER_DIRECTORIES;
-		fill_directory(&dir, s->pathspec.raw);
+		fill_directory(&dir, &s->pathspec);
 		for (i = 0; i < dir.nr; i++) {
 			struct dir_entry *ent = dir.entries[i];
 			if (cache_name_is_other(ent->name, ent->len) &&
-- 
1.8.0.rc2.23.g1fb49df

  parent reply	other threads:[~2013-01-13 12:38 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-13 12:35 [PATCH v3 00/31] nd/parse-pathspec Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 01/31] clean: remove unused variable "seen" Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 02/31] Add copy_pathspec Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 03/31] Add parse_pathspec() that converts cmdline args to struct pathspec Nguyễn Thái Ngọc Duy
2013-01-14  0:05   ` Martin von Zweigbergk
2013-01-14  1:11     ` Duy Nguyen
2013-01-13 12:35 ` [PATCH v3 04/31] parse_pathspec: save original pathspec for reporting Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 05/31] Export parse_pathspec() and convert some get_pathspec() calls Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 06/31] Guard against new pathspec magic in pathspec matching code Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 07/31] clean: convert to use parse_pathspec Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 08/31] parse_pathspec: add PATHSPEC_EMPTY_MATCH_ALL Nguyễn Thái Ngọc Duy
2013-01-21 23:12   ` Martin von Zweigbergk
2013-01-22  2:46     ` Duy Nguyen
2013-01-13 12:35 ` [PATCH v3 09/31] commit: convert to use parse_pathspec Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 10/31] status: " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 11/31] rerere: " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 12/31] checkout: " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 13/31] rm: " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 14/31] parse_pathspec: support stripping submodule trailing slashes Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 15/31] ls-files: convert to use parse_pathspec Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 16/31] archive: " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 17/31] parse_pathspec: support stripping/checking submodule paths Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 18/31] add: convert to use parse_pathspec Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 19/31] Convert read_cache_preload() to take struct pathspec Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 20/31] Convert unmerge_cache " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 21/31] checkout: convert read_tree_some " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 22/31] Convert report_path_error " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 23/31] Convert refresh_index " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` Nguyễn Thái Ngọc Duy [this message]
2013-01-13 12:35 ` [PATCH v3 25/31] Convert add_files_to_cache " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 26/31] Convert common_prefix() to use " Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 27/31] Remove diff_tree_{setup,release}_paths Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 28/31] Remove init_pathspec() in favor of parse_pathspec() Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 29/31] Remove match_pathspec() in favor of match_pathspec_depth() Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 30/31] tree-diff: remove the use of pathspec's raw[] in follow-rename codepath Nguyễn Thái Ngọc Duy
2013-01-13 12:35 ` [PATCH v3 31/31] Rename field "raw" to "_raw" in struct pathspec Nguyễn Thái Ngọc Duy
2013-01-13 23:21 ` [PATCH v3 00/31] nd/parse-pathspec Junio C Hamano

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1358080539-17436-25-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.
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 NNTP newsgroup(s).