All of lore.kernel.org
 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 v1 03/45] Move struct pathspec and related functions to pathspec.[ch]
Date: Fri, 15 Mar 2013 13:06:18 +0700	[thread overview]
Message-ID: <1363327620-29017-4-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1363327620-29017-1-git-send-email-pclouds@gmail.com>


Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 archive.c              |   1 +
 builtin/grep.c         |   1 +
 builtin/ls-files.c     |   1 +
 builtin/ls-tree.c      |   1 +
 builtin/update-index.c |   1 +
 cache.h                |  22 +-------
 diff.h                 |   1 +
 dir.c                  |   1 +
 pathspec.c             | 149 +++++++++++++++++++++++++++++++++++++++++++++++++
 pathspec.h             |  21 +++++++
 preload-index.c        |   1 +
 setup.c                | 149 -------------------------------------------------
 tree-walk.c            |   1 +
 13 files changed, 181 insertions(+), 169 deletions(-)

diff --git a/archive.c b/archive.c
index 93e00bb..72c6b0f 100644
--- a/archive.c
+++ b/archive.c
@@ -5,6 +5,7 @@
 #include "archive.h"
 #include "parse-options.h"
 #include "unpack-trees.h"
+#include "pathspec.h"
 
 static char const * const archive_usage[] = {
 	N_("git archive [options] <tree-ish> [<path>...]"),
diff --git a/builtin/grep.c b/builtin/grep.c
index 8025964..3701c2e 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -17,6 +17,7 @@
 #include "grep.h"
 #include "quote.h"
 #include "dir.h"
+#include "pathspec.h"
 
 static char const * const grep_usage[] = {
 	N_("git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]"),
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 175e6e3..752570b 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -13,6 +13,7 @@
 #include "parse-options.h"
 #include "resolve-undo.h"
 #include "string-list.h"
+#include "pathspec.h"
 
 static int abbrev;
 static int show_deleted;
diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c
index fb76e38..93fc3a0 100644
--- a/builtin/ls-tree.c
+++ b/builtin/ls-tree.c
@@ -10,6 +10,7 @@
 #include "quote.h"
 #include "builtin.h"
 #include "parse-options.h"
+#include "pathspec.h"
 
 static int line_termination = '\n';
 #define LS_RECURSIVE 1
diff --git a/builtin/update-index.c b/builtin/update-index.c
index ada1dff..ffae585 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -11,6 +11,7 @@
 #include "refs.h"
 #include "resolve-undo.h"
 #include "parse-options.h"
+#include "pathspec.h"
 
 /*
  * Default to not allowing changes to the list of files. The
diff --git a/cache.h b/cache.h
index e493563..5115c1b 100644
--- a/cache.h
+++ b/cache.h
@@ -182,6 +182,8 @@ struct cache_entry {
 #error "CE_EXTENDED_FLAGS out of range"
 #endif
 
+struct pathspec;
+
 /*
  * Copy the sha1 and stat state of a cache entry from one to
  * another. But we never change the name, or the hash state!
@@ -474,28 +476,8 @@ extern int index_name_is_other(const struct index_state *, const char *, int);
 extern int ie_match_stat(const struct index_state *, struct cache_entry *, struct stat *, unsigned int);
 extern int ie_modified(const struct index_state *, struct cache_entry *, struct stat *, unsigned int);
 
-#define PATHSPEC_ONESTAR 1	/* the pathspec pattern sastisfies GFNM_ONESTAR */
-
-struct pathspec {
-	const char **raw; /* get_pathspec() result, not freed by free_pathspec() */
-	int nr;
-	unsigned int has_wildcard:1;
-	unsigned int recursive:1;
-	int max_depth;
-	struct pathspec_item {
-		const char *match;
-		int len;
-		int nowildcard_len;
-		int flags;
-	} *items;
-};
-
-extern int init_pathspec(struct pathspec *, const char **);
-extern void free_pathspec(struct pathspec *);
 extern int ce_path_match(const struct cache_entry *ce, const struct pathspec *pathspec);
 
-extern int limit_pathspec_to_literal(void);
-
 #define HASH_WRITE_OBJECT 1
 #define HASH_FORMAT_CHECK 2
 extern int index_fd(unsigned char *sha1, int fd, struct stat *st, enum object_type type, const char *path, unsigned flags);
diff --git a/diff.h b/diff.h
index 78b4091..d1bc914 100644
--- a/diff.h
+++ b/diff.h
@@ -5,6 +5,7 @@
 #define DIFF_H
 
 #include "tree-walk.h"
+#include "pathspec.h"
 
 struct rev_info;
 struct diff_options;
diff --git a/dir.c b/dir.c
index 57394e4..97ad45b 100644
--- a/dir.c
+++ b/dir.c
@@ -11,6 +11,7 @@
 #include "dir.h"
 #include "refs.h"
 #include "wildmatch.h"
+#include "pathspec.h"
 
 struct path_simplify {
 	int len;
diff --git a/pathspec.c b/pathspec.c
index 284f397..aa3e4d0 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -99,3 +99,152 @@ void die_if_path_beyond_symlink(const char *path, const char *prefix)
 		die(_("'%s' is beyond a symbolic link"), path + len);
 	}
 }
+
+/*
+ * Magic pathspec
+ *
+ * NEEDSWORK: These need to be moved to dir.h or even to a new
+ * pathspec.h when we restructure get_pathspec() users to use the
+ * "struct pathspec" interface.
+ *
+ * Possible future magic semantics include stuff like:
+ *
+ *	{ PATHSPEC_NOGLOB, '!', "noglob" },
+ *	{ PATHSPEC_ICASE, '\0', "icase" },
+ *	{ PATHSPEC_RECURSIVE, '*', "recursive" },
+ *	{ PATHSPEC_REGEXP, '\0', "regexp" },
+ *
+ */
+#define PATHSPEC_FROMTOP    (1<<0)
+
+static struct pathspec_magic {
+	unsigned bit;
+	char mnemonic; /* this cannot be ':'! */
+	const char *name;
+} pathspec_magic[] = {
+	{ PATHSPEC_FROMTOP, '/', "top" },
+};
+
+/*
+ * Take an element of a pathspec and check for magic signatures.
+ * Append the result to the prefix.
+ *
+ * For now, we only parse the syntax and throw out anything other than
+ * "top" magic.
+ *
+ * NEEDSWORK: This needs to be rewritten when we start migrating
+ * get_pathspec() users to use the "struct pathspec" interface.  For
+ * example, a pathspec element may be marked as case-insensitive, but
+ * the prefix part must always match literally, and a single stupid
+ * string cannot express such a case.
+ */
+static const char *prefix_pathspec(const char *prefix, int prefixlen, const char *elt)
+{
+	unsigned magic = 0;
+	const char *copyfrom = elt;
+	int i;
+
+	if (elt[0] != ':') {
+		; /* nothing to do */
+	} else if (elt[1] == '(') {
+		/* longhand */
+		const char *nextat;
+		for (copyfrom = elt + 2;
+		     *copyfrom && *copyfrom != ')';
+		     copyfrom = nextat) {
+			size_t len = strcspn(copyfrom, ",)");
+			if (copyfrom[len] == ')')
+				nextat = copyfrom + len;
+			else
+				nextat = copyfrom + len + 1;
+			if (!len)
+				continue;
+			for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++)
+				if (strlen(pathspec_magic[i].name) == len &&
+				    !strncmp(pathspec_magic[i].name, copyfrom, len)) {
+					magic |= pathspec_magic[i].bit;
+					break;
+				}
+			if (ARRAY_SIZE(pathspec_magic) <= i)
+				die("Invalid pathspec magic '%.*s' in '%s'",
+				    (int) len, copyfrom, elt);
+		}
+		if (*copyfrom != ')')
+			die("Missing ')' at the end of pathspec magic in '%s'", elt);
+		copyfrom++;
+	} else {
+		/* shorthand */
+		for (copyfrom = elt + 1;
+		     *copyfrom && *copyfrom != ':';
+		     copyfrom++) {
+			char ch = *copyfrom;
+
+			if (!is_pathspec_magic(ch))
+				break;
+			for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++)
+				if (pathspec_magic[i].mnemonic == ch) {
+					magic |= pathspec_magic[i].bit;
+					break;
+				}
+			if (ARRAY_SIZE(pathspec_magic) <= i)
+				die("Unimplemented pathspec magic '%c' in '%s'",
+				    ch, elt);
+		}
+		if (*copyfrom == ':')
+			copyfrom++;
+	}
+
+	if (magic & PATHSPEC_FROMTOP)
+		return xstrdup(copyfrom);
+	else
+		return prefix_path(prefix, prefixlen, copyfrom);
+}
+
+/*
+ * N.B. get_pathspec() is deprecated in favor of the "struct pathspec"
+ * based interface - see pathspec_magic above.
+ *
+ * Arguments:
+ *  - prefix - a path relative to the root of the working tree
+ *  - pathspec - a list of paths underneath the prefix path
+ *
+ * Iterates over pathspec, prepending each path with prefix,
+ * and return the resulting list.
+ *
+ * If pathspec is empty, return a singleton list containing prefix.
+ *
+ * If pathspec and prefix are both empty, return an empty list.
+ *
+ * This is typically used by built-in commands such as add.c, in order
+ * to normalize argv arguments provided to the built-in into a list of
+ * paths to process, all relative to the root of the working tree.
+ */
+const char **get_pathspec(const char *prefix, const char **pathspec)
+{
+	const char *entry = *pathspec;
+	const char **src, **dst;
+	int prefixlen;
+
+	if (!prefix && !entry)
+		return NULL;
+
+	if (!entry) {
+		static const char *spec[2];
+		spec[0] = prefix;
+		spec[1] = NULL;
+		return spec;
+	}
+
+	/* Otherwise we have to re-write the entries.. */
+	src = pathspec;
+	dst = pathspec;
+	prefixlen = prefix ? strlen(prefix) : 0;
+	while (*src) {
+		*(dst++) = prefix_pathspec(prefix, prefixlen, *src);
+		src++;
+	}
+	*dst = NULL;
+	if (!*pathspec)
+		return NULL;
+	return pathspec;
+}
diff --git a/pathspec.h b/pathspec.h
index db0184a..7884068 100644
--- a/pathspec.h
+++ b/pathspec.h
@@ -1,6 +1,27 @@
 #ifndef PATHSPEC_H
 #define PATHSPEC_H
 
+#define PATHSPEC_ONESTAR 1	/* the pathspec pattern sastisfies GFNM_ONESTAR */
+
+struct pathspec {
+	const char **raw; /* get_pathspec() result, not freed by free_pathspec() */
+	int nr;
+	unsigned int has_wildcard:1;
+	unsigned int recursive:1;
+	int max_depth;
+	struct pathspec_item {
+		const char *match;
+		int len;
+		int nowildcard_len;
+		int flags;
+	} *items;
+};
+
+extern int init_pathspec(struct pathspec *, const char **);
+extern void free_pathspec(struct pathspec *);
+
+extern int limit_pathspec_to_literal(void);
+
 extern char *find_pathspecs_matching_against_index(const char **pathspec);
 extern void add_pathspec_matches_against_index(const char **pathspec, char *seen, int specs);
 extern const char *check_path_for_gitlink(const char *path);
diff --git a/preload-index.c b/preload-index.c
index 49cb08d..cddfffa 100644
--- a/preload-index.c
+++ b/preload-index.c
@@ -2,6 +2,7 @@
  * Copyright (C) 2008 Linus Torvalds
  */
 #include "cache.h"
+#include "pathspec.h"
 
 #ifdef NO_PTHREADS
 static void preload_index(struct index_state *index, const char **pathspec)
diff --git a/setup.c b/setup.c
index d0cd784..acdc634 100644
--- a/setup.c
+++ b/setup.c
@@ -155,155 +155,6 @@ void verify_non_filename(const char *prefix, const char *arg)
 }
 
 /*
- * Magic pathspec
- *
- * NEEDSWORK: These need to be moved to dir.h or even to a new
- * pathspec.h when we restructure get_pathspec() users to use the
- * "struct pathspec" interface.
- *
- * Possible future magic semantics include stuff like:
- *
- *	{ PATHSPEC_NOGLOB, '!', "noglob" },
- *	{ PATHSPEC_ICASE, '\0', "icase" },
- *	{ PATHSPEC_RECURSIVE, '*', "recursive" },
- *	{ PATHSPEC_REGEXP, '\0', "regexp" },
- *
- */
-#define PATHSPEC_FROMTOP    (1<<0)
-
-static struct pathspec_magic {
-	unsigned bit;
-	char mnemonic; /* this cannot be ':'! */
-	const char *name;
-} pathspec_magic[] = {
-	{ PATHSPEC_FROMTOP, '/', "top" },
-};
-
-/*
- * Take an element of a pathspec and check for magic signatures.
- * Append the result to the prefix.
- *
- * For now, we only parse the syntax and throw out anything other than
- * "top" magic.
- *
- * NEEDSWORK: This needs to be rewritten when we start migrating
- * get_pathspec() users to use the "struct pathspec" interface.  For
- * example, a pathspec element may be marked as case-insensitive, but
- * the prefix part must always match literally, and a single stupid
- * string cannot express such a case.
- */
-static const char *prefix_pathspec(const char *prefix, int prefixlen, const char *elt)
-{
-	unsigned magic = 0;
-	const char *copyfrom = elt;
-	int i;
-
-	if (elt[0] != ':') {
-		; /* nothing to do */
-	} else if (elt[1] == '(') {
-		/* longhand */
-		const char *nextat;
-		for (copyfrom = elt + 2;
-		     *copyfrom && *copyfrom != ')';
-		     copyfrom = nextat) {
-			size_t len = strcspn(copyfrom, ",)");
-			if (copyfrom[len] == ')')
-				nextat = copyfrom + len;
-			else
-				nextat = copyfrom + len + 1;
-			if (!len)
-				continue;
-			for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++)
-				if (strlen(pathspec_magic[i].name) == len &&
-				    !strncmp(pathspec_magic[i].name, copyfrom, len)) {
-					magic |= pathspec_magic[i].bit;
-					break;
-				}
-			if (ARRAY_SIZE(pathspec_magic) <= i)
-				die("Invalid pathspec magic '%.*s' in '%s'",
-				    (int) len, copyfrom, elt);
-		}
-		if (*copyfrom != ')')
-			die("Missing ')' at the end of pathspec magic in '%s'", elt);
-		copyfrom++;
-	} else {
-		/* shorthand */
-		for (copyfrom = elt + 1;
-		     *copyfrom && *copyfrom != ':';
-		     copyfrom++) {
-			char ch = *copyfrom;
-
-			if (!is_pathspec_magic(ch))
-				break;
-			for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++)
-				if (pathspec_magic[i].mnemonic == ch) {
-					magic |= pathspec_magic[i].bit;
-					break;
-				}
-			if (ARRAY_SIZE(pathspec_magic) <= i)
-				die("Unimplemented pathspec magic '%c' in '%s'",
-				    ch, elt);
-		}
-		if (*copyfrom == ':')
-			copyfrom++;
-	}
-
-	if (magic & PATHSPEC_FROMTOP)
-		return xstrdup(copyfrom);
-	else
-		return prefix_path(prefix, prefixlen, copyfrom);
-}
-
-/*
- * N.B. get_pathspec() is deprecated in favor of the "struct pathspec"
- * based interface - see pathspec_magic above.
- *
- * Arguments:
- *  - prefix - a path relative to the root of the working tree
- *  - pathspec - a list of paths underneath the prefix path
- *
- * Iterates over pathspec, prepending each path with prefix,
- * and return the resulting list.
- *
- * If pathspec is empty, return a singleton list containing prefix.
- *
- * If pathspec and prefix are both empty, return an empty list.
- *
- * This is typically used by built-in commands such as add.c, in order
- * to normalize argv arguments provided to the built-in into a list of
- * paths to process, all relative to the root of the working tree.
- */
-const char **get_pathspec(const char *prefix, const char **pathspec)
-{
-	const char *entry = *pathspec;
-	const char **src, **dst;
-	int prefixlen;
-
-	if (!prefix && !entry)
-		return NULL;
-
-	if (!entry) {
-		static const char *spec[2];
-		spec[0] = prefix;
-		spec[1] = NULL;
-		return spec;
-	}
-
-	/* Otherwise we have to re-write the entries.. */
-	src = pathspec;
-	dst = pathspec;
-	prefixlen = prefix ? strlen(prefix) : 0;
-	while (*src) {
-		*(dst++) = prefix_pathspec(prefix, prefixlen, *src);
-		src++;
-	}
-	*dst = NULL;
-	if (!*pathspec)
-		return NULL;
-	return pathspec;
-}
-
-/*
  * Test if it looks like we're at a git directory.
  * We want to see:
  *
diff --git a/tree-walk.c b/tree-walk.c
index 6e30ef9..72a9613 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -3,6 +3,7 @@
 #include "unpack-trees.h"
 #include "dir.h"
 #include "tree.h"
+#include "pathspec.h"
 
 static const char *get_mode(const char *str, unsigned int *modep)
 {
-- 
1.8.0.rc0.19.g7bbb31d

  parent reply	other threads:[~2013-03-15  6:24 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-15  6:06 [PATCH v1 00/45] nd/parse-pathspec and :(glob) pathspec magic Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 01/45] setup.c: check that the pathspec magic ends with ")" Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 02/45] clean: remove unused variable "seen" Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` Nguyễn Thái Ngọc Duy [this message]
2013-03-15  6:06 ` [PATCH v1 04/45] pathspec: i18n-ize error strings in pathspec parsing code Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 05/45] pathspec: add copy_pathspec Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 06/45] Add parse_pathspec() that converts cmdline args to struct pathspec Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 07/45] parse_pathspec: save original pathspec for reporting Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 08/45] parse_pathspec: add PATHSPEC_PREFER_{CWD,FULL} Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 09/45] Convert some get_pathspec() calls to parse_pathspec() Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 10/45] parse_pathspec: a special flag for max_depth feature Nguyễn Thái Ngọc Duy
2013-03-15 21:28   ` Eric Sunshine
2013-03-15  6:06 ` [PATCH v1 11/45] parse_pathspec: support stripping submodule trailing slashes Nguyễn Thái Ngọc Duy
2013-03-17 21:55   ` Junio C Hamano
2013-03-18  0:53     ` Duy Nguyen
2013-03-15  6:06 ` [PATCH v1 12/45] parse_pathspec: support stripping/checking submodule paths Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 13/45] parse_pathspec: support prefixing original patterns Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 14/45] Guard against new pathspec magic in pathspec matching code Nguyễn Thái Ngọc Duy
2013-03-17 22:00   ` Junio C Hamano
2013-03-15  6:06 ` [PATCH v1 15/45] clean: convert to use parse_pathspec Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 16/45] commit: " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 17/45] status: " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 18/45] rerere: " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 19/45] checkout: " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 20/45] rm: " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 21/45] ls-files: " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 22/45] archive: " Nguyễn Thái Ngọc Duy
2013-03-15 17:56   ` Junio C Hamano
2013-03-16  1:08     ` Duy Nguyen
2013-03-17  5:00       ` Junio C Hamano
2013-03-17  5:31         ` Duy Nguyen
2013-03-17  6:22           ` Junio C Hamano
2013-03-15  6:06 ` [PATCH v1 23/45] check-ignore: " Nguyễn Thái Ngọc Duy
2013-04-12 15:03   ` Adam Spiers
2013-04-12 23:09     ` Duy Nguyen
2013-04-14 23:25       ` Adam Spiers
2013-04-14 23:48         ` Duy Nguyen
2013-04-15 16:17           ` Adam Spiers
2013-03-15  6:06 ` [PATCH v1 24/45] add: " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 25/45] reset: " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 26/45] Convert read_cache_preload() to take struct pathspec Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 27/45] Convert run_add_interactive to use " Nguyễn Thái Ngọc Duy
2013-03-18 18:26   ` John Keeping
2013-03-19  1:58     ` Duy Nguyen
2013-03-19 10:58       ` John Keeping
2013-03-15  6:06 ` [PATCH v1 28/45] Convert unmerge_cache to take " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 29/45] checkout: convert read_tree_some " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 30/45] Convert report_path_error " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 31/45] Convert refresh_index " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 32/45] Convert {read,fill}_directory " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 33/45] Convert add_files_to_cache " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 34/45] Convert common_prefix() to use " Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 35/45] Remove diff_tree_{setup,release}_paths Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 36/45] Remove init_pathspec() in favor of parse_pathspec() Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 37/45] Remove match_pathspec() in favor of match_pathspec_depth() Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 38/45] tree-diff: remove the use of pathspec's raw[] in follow-rename codepath Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 39/45] parse_pathspec: make sure the prefix part is wildcard-free Nguyễn Thái Ngọc Duy
2013-03-19 18:34   ` Junio C Hamano
2013-03-20  1:32     ` Duy Nguyen
2013-03-20 10:54       ` Duy Nguyen
2013-03-15  6:06 ` [PATCH v1 40/45] parse_pathspec: preserve prefix length via PATHSPEC_PREFIX_ORIGIN Nguyễn Thái Ngọc Duy
2013-03-15 22:00   ` Eric Sunshine
2013-03-15  6:06 ` [PATCH v1 41/45] Kill limit_pathspec_to_literal() as it's only used by parse_pathspec() Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 42/45] pathspec: support :(literal) syntax for noglob pathspec Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 43/45] pathspec: make --literal-pathspecs disable pathspec magic Nguyễn Thái Ngọc Duy
2013-03-15  6:06 ` [PATCH v1 44/45] pathspec: support :(glob) syntax Nguyễn Thái Ngọc Duy
2013-03-15 22:11   ` Eric Sunshine
2013-03-15  6:07 ` [PATCH v1 45/45] Rename field "raw" to "_raw" in struct pathspec Nguyễn Thái Ngọc Duy
2013-03-15 17:48 ` [PATCH v1 00/45] nd/parse-pathspec and :(glob) pathspec magic Junio C Hamano
2013-03-20 12:16 ` [PATCH v2 00/45] parse_pathspec and :(glob) magic Nguyễn Thái Ngọc Duy
2013-03-20 12:16   ` [PATCH v2 06/45] Add parse_pathspec() that converts cmdline args to struct pathspec Nguyễn Thái Ngọc Duy
2013-03-20 19:40     ` Eric Sunshine
2013-03-22 21:55     ` Junio C Hamano
2013-03-20 12:16   ` [PATCH v2 11/45] parse_pathspec: support stripping submodule trailing slashes Nguyễn Thái Ngọc Duy
2013-03-20 12:16   ` [PATCH v2 12/45] parse_pathspec: support stripping/checking submodule paths Nguyễn Thái Ngọc Duy
2013-03-20 12:16   ` [PATCH v2 14/45] Guard against new pathspec magic in pathspec matching code Nguyễn Thái Ngọc Duy
2013-03-20 19:45     ` Eric Sunshine
2013-03-20 12:16   ` [PATCH v2 27/45] Convert run_add_interactive to use struct pathspec Nguyễn Thái Ngọc Duy
2013-03-20 12:16   ` [PATCH v2 39/45] parse_pathspec: make sure the prefix part is wildcard-free Nguyễn Thái Ngọc Duy
2013-03-20 18:02   ` [PATCH v2 00/45] parse_pathspec and :(glob) magic Junio C Hamano
2013-03-21  5:33     ` Duy Nguyen
2013-03-21  5:43       ` Duy Nguyen
2013-03-21 17:28         ` Junio C Hamano
2013-03-21 17:50           ` Junio C Hamano
2013-03-23  3:13             ` Duy Nguyen
2013-03-23  3:15               ` Duy Nguyen
2013-03-27 15:39                 ` Junio C Hamano
2013-03-24  0:57               ` Eric Sunshine

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=1363327620-29017-4-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.