git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 02/16] dir: remove struct path_simplify

From
BWBrandon Williams <bmwill@google.com>
Date
Jan 3, 2017, 18:42 UTC
Message-ID
<20170103184241.128409-3-bmwill@google.com>
In-Reply-To
<20170103184241.128409-1-bmwill@google.com>

Teach simplify_away() and exclude_matches_pathspec() to handle struct pathspec directly, eliminating the need for the struct path_simplify.

Also renamed the len parameter to pathlen in exclude_matches_pathspec() to match the parameter names used in simplify_away().

Signed-off-by: Brandon Williams <bmwill@google.com>
---
 dir.c | 181 +++++++++++++++++++++++++++++-------------------------------------
 1 file changed, 78 insertions(+), 103 deletions(-)
diff --git a/dir.c b/dir.c
index bfa8c8a9a..1df61f10f 100644
--- a/dir.c
+++ b/dir.c
@@ -16,11 +16,6 @@
 #include "varint.h"
 #include "ewah/ewok.h"
 
-struct path_simplify {
-	int len;
-	const char *path;
-};
-
 /*
  * Tells read_directory_recursive how a file or directory should be treated.
  * Values are ordered by significance, e.g. if a directory contains both
@@ -50,7 +45,7 @@ struct cached_dir {
 
 static enum path_treatment read_directory_recursive(struct dir_struct *dir,
 	const char *path, int len, struct untracked_cache_dir *untracked,
-	int check_only, const struct path_simplify *simplify);
+	int check_only, const struct pathspec *pathspec);
 static int get_dtype(struct dirent *de, const char *path, int len);
 
 int fspathcmp(const char *a, const char *b)
@@ -1312,7 +1307,7 @@ static enum exist_status directory_exists_in_index(const char *dirname, int len)
 static enum path_treatment treat_directory(struct dir_struct *dir,
 	struct untracked_cache_dir *untracked,
 	const char *dirname, int len, int baselen, int exclude,
-	const struct path_simplify *simplify)
+	const struct pathspec *pathspec)
 {
 	/* The "len-1" is to strip the final '/' */
 	switch (directory_exists_in_index(dirname, len-1)) {
@@ -1341,7 +1336,7 @@ static enum path_treatment treat_directory(struct dir_struct *dir,
 	untracked = lookup_untracked(dir->untracked, untracked,
 				     dirname + baselen, len - baselen);
 	return read_directory_recursive(dir, dirname, len,
-					untracked, 1, simplify);
+					untracked, 1, pathspec);
 }
 
 /*
@@ -1349,24 +1344,34 @@ static enum path_treatment treat_directory(struct dir_struct *dir,
  * reading - if the path cannot possibly be in the pathspec,
  * return true, and we'll skip it early.
  */
-static int simplify_away(const char *path, int pathlen, const struct path_simplify *simplify)
+static int simplify_away(const char *path, int pathlen,
+			 const struct pathspec *pathspec)
 {
-	if (simplify) {
-		for (;;) {
-			const char *match = simplify->path;
-			int len = simplify->len;
+	int i;
 
-			if (!match)
-				break;
-			if (len > pathlen)
-				len = pathlen;
-			if (!memcmp(path, match, len))
-				return 0;
-			simplify++;
-		}
-		return 1;
+	if (pathspec)
+		GUARD_PATHSPEC(pathspec,
+			       PATHSPEC_FROMTOP |
+			       PATHSPEC_MAXDEPTH |
+			       PATHSPEC_LITERAL |
+			       PATHSPEC_GLOB |
+			       PATHSPEC_ICASE |
+			       PATHSPEC_EXCLUDE);
+
+	if (!pathspec || !pathspec->nr)
+		return 0;
+
+	for (i = 0; i < pathspec->nr; i++) {
+		const struct pathspec_item *item = &pathspec->items[i];
+		int len = item->nowildcard_len;
+
+		if (len > pathlen)
+			len = pathlen;
+		if (!ps_strncmp(item, item->match, path, len))
+			return 0;
 	}
-	return 0;
+
+	return 1;
 }
 
 /*
@@ -1380,19 +1385,34 @@ static int simplify_away(const char *path, int pathlen, const struct path_simpli
  *   2. the path is a directory prefix of some element in the
  *      pathspec
  */
-static int exclude_matches_pathspec(const char *path, int len,
-		const struct path_simplify *simplify)
-{
-	if (simplify) {
-		for (; simplify->path; simplify++) {
-			if (len == simplify->len
-			    && !memcmp(path, simplify->path, len))
-				return 1;
-			if (len < simplify->len
-			    && simplify->path[len] == '/'
-			    && !memcmp(path, simplify->path, len))
-				return 1;
-		}
+static int exclude_matches_pathspec(const char *path, int pathlen,
+				    const struct pathspec *pathspec)
+{
+	int i;
+
+	if (pathspec)
+		GUARD_PATHSPEC(pathspec,
+			       PATHSPEC_FROMTOP |
+			       PATHSPEC_MAXDEPTH |
+			       PATHSPEC_LITERAL |
+			       PATHSPEC_GLOB |
+			       PATHSPEC_ICASE |
+			       PATHSPEC_EXCLUDE);
+
+	if (!pathspec || !pathspec->nr)
+		return 0;
+
+	for (i = 0; i < pathspec->nr; i++) {
+		const struct pathspec_item *item = &pathspec->items[i];
+		int len = item->nowildcard_len;
+
+		if (len == pathlen &&
+		    !ps_strncmp(item, item->match, path, pathlen))
+			return 1;
+		if (len > pathlen &&
+		    item->match[pathlen] == '/' &&
+		    !ps_strncmp(item, item->match, path, pathlen))
+			return 1;
 	}
 	return 0;
 }
@@ -1460,7 +1480,7 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
 					  struct untracked_cache_dir *untracked,
 					  struct strbuf *path,
 					  int baselen,
-					  const struct path_simplify *simplify,
+					  const struct pathspec *pathspec,
 					  int dtype, struct dirent *de)
 {
 	int exclude;
@@ -1512,7 +1532,7 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
 	case DT_DIR:
 		strbuf_addch(path, '/');
 		return treat_directory(dir, untracked, path->buf, path->len,
-				       baselen, exclude, simplify);
+				       baselen, exclude, pathspec);
 	case DT_REG:
 	case DT_LNK:
 		return exclude ? path_excluded : path_untracked;
@@ -1524,7 +1544,7 @@ static enum path_treatment treat_path_fast(struct dir_struct *dir,
 					   struct cached_dir *cdir,
 					   struct strbuf *path,
 					   int baselen,
-					   const struct path_simplify *simplify)
+					   const struct pathspec *pathspec)
 {
 	strbuf_setlen(path, baselen);
 	if (!cdir->ucd) {
@@ -1541,7 +1561,7 @@ static enum path_treatment treat_path_fast(struct dir_struct *dir,
 		 * with check_only set.
 		 */
 		return read_directory_recursive(dir, path->buf, path->len,
-						cdir->ucd, 1, simplify);
+						cdir->ucd, 1, pathspec);
 	/*
 	 * We get path_recurse in the first run when
 	 * directory_exists_in_index() returns index_nonexistent. We
@@ -1556,23 +1576,23 @@ static enum path_treatment treat_path(struct dir_struct *dir,
 				      struct cached_dir *cdir,
 				      struct strbuf *path,
 				      int baselen,
-				      const struct path_simplify *simplify)
+				      const struct pathspec *pathspec)
 {
 	int dtype;
 	struct dirent *de = cdir->de;
 
 	if (!de)
 		return treat_path_fast(dir, untracked, cdir, path,
-				       baselen, simplify);
+				       baselen, pathspec);
 	if (is_dot_or_dotdot(de->d_name) || !strcmp(de->d_name, ".git"))
 		return path_none;
 	strbuf_setlen(path, baselen);
 	strbuf_addstr(path, de->d_name);
-	if (simplify_away(path->buf, path->len, simplify))
+	if (simplify_away(path->buf, path->len, pathspec))
 		return path_none;
 
 	dtype = DTYPE(de);
-	return treat_one_path(dir, untracked, path, baselen, simplify, dtype, de);
+	return treat_one_path(dir, untracked, path, baselen, pathspec, dtype, de);
 }
 
 static void add_untracked(struct untracked_cache_dir *dir, const char *name)
@@ -1703,7 +1723,7 @@ static void close_cached_dir(struct cached_dir *cdir)
 static enum path_treatment read_directory_recursive(struct dir_struct *dir,
 				    const char *base, int baselen,
 				    struct untracked_cache_dir *untracked, int check_only,
-				    const struct path_simplify *simplify)
+				    const struct pathspec *pathspec)
 {
 	struct cached_dir cdir;
 	enum path_treatment state, subdir_state, dir_state = path_none;
@@ -1719,7 +1739,8 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,
 
 	while (!read_cached_dir(&cdir)) {
 		/* check how the file or directory should be treated */
-		state = treat_path(dir, untracked, &cdir, &path, baselen, simplify);
+		state = treat_path(dir, untracked, &cdir, &path,
+				   baselen, pathspec);
 
 		if (state > dir_state)
 			dir_state = state;
@@ -1731,8 +1752,9 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,
 					      path.buf + baselen,
 					      path.len - baselen);
 			subdir_state =
-				read_directory_recursive(dir, path.buf, path.len,
-							 ud, check_only, simplify);
+				read_directory_recursive(dir, path.buf,
+							 path.len, ud,
+							 check_only, pathspec);
 			if (subdir_state > dir_state)
 				dir_state = subdir_state;
 		}
@@ -1756,7 +1778,7 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,
 			else if ((dir->flags & DIR_SHOW_IGNORED_TOO) ||
 				((dir->flags & DIR_COLLECT_IGNORED) &&
 				exclude_matches_pathspec(path.buf, path.len,
-					simplify)))
+							 pathspec)))
 				dir_add_ignored(dir, path.buf, path.len);
 			break;
 
@@ -1787,36 +1809,9 @@ static int cmp_name(const void *p1, const void *p2)
 	return name_compare(e1->name, e1->len, e2->name, e2->len);
 }
 
-static struct path_simplify *create_simplify(const char **pathspec)
-{
-	int nr, alloc = 0;
-	struct path_simplify *simplify = NULL;
-
-	if (!pathspec)
-		return NULL;
-
-	for (nr = 0 ; ; nr++) {
-		const char *match;
-		ALLOC_GROW(simplify, nr + 1, alloc);
-		match = *pathspec++;
-		if (!match)
-			break;
-		simplify[nr].path = match;
-		simplify[nr].len = simple_length(match);
-	}
-	simplify[nr].path = NULL;
-	simplify[nr].len = 0;
-	return simplify;
-}
-
-static void free_simplify(struct path_simplify *simplify)
-{
-	free(simplify);
-}
-
 static int treat_leading_path(struct dir_struct *dir,
 			      const char *path, int len,
-			      const struct path_simplify *simplify)
+			      const struct pathspec *pathspec)
 {
 	struct strbuf sb = STRBUF_INIT;
 	int baselen, rc = 0;
@@ -1840,9 +1835,9 @@ static int treat_leading_path(struct dir_struct *dir,
 		strbuf_add(&sb, path, baselen);
 		if (!is_directory(sb.buf))
 			break;
-		if (simplify_away(sb.buf, sb.len, simplify))
+		if (simplify_away(sb.buf, sb.len, pathspec))
 			break;
-		if (treat_one_path(dir, NULL, &sb, baselen, simplify,
+		if (treat_one_path(dir, NULL, &sb, baselen, pathspec,
 				   DT_DIR, NULL) == path_none)
 			break; /* do not recurse into it */
 		if (len <= baselen) {
@@ -2010,33 +2005,14 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d
 	return root;
 }
 
-int read_directory(struct dir_struct *dir, const char *path, int len, const struct pathspec *pathspec)
+int read_directory(struct dir_struct *dir, const char *path,
+		   int len, const struct pathspec *pathspec)
 {
-	struct path_simplify *simplify;
 	struct untracked_cache_dir *untracked;
 
-	/*
-	 * Check out create_simplify()
-	 */
-	if (pathspec)
-		GUARD_PATHSPEC(pathspec,
-			       PATHSPEC_FROMTOP |
-			       PATHSPEC_MAXDEPTH |
-			       PATHSPEC_LITERAL |
-			       PATHSPEC_GLOB |
-			       PATHSPEC_ICASE |
-			       PATHSPEC_EXCLUDE);
-
 	if (has_symlink_leading_path(path, len))
 		return dir->nr;
 
-	/*
-	 * exclude patterns are treated like positive ones in
-	 * create_simplify. Usually exclude patterns should be a
-	 * subset of positive ones, which has no impacts on
-	 * create_simplify().
-	 */
-	simplify = create_simplify(pathspec ? pathspec->_raw : NULL);
 	untracked = validate_untracked_cache(dir, len, pathspec);
 	if (!untracked)
 		/*
@@ -2044,9 +2020,8 @@ int read_directory(struct dir_struct *dir, const char *path, int len, const stru
 		 * e.g. prep_exclude()
 		 */
 		dir->untracked = NULL;
-	if (!len || treat_leading_path(dir, path, len, simplify))
-		read_directory_recursive(dir, path, len, untracked, 0, simplify);
-	free_simplify(simplify);
+	if (!len || treat_leading_path(dir, path, len, pathspec))
+		read_directory_recursive(dir, path, len, untracked, 0, pathspec);
 	QSORT(dir->entries, dir->nr, cmp_name);
 	QSORT(dir->ignored, dir->ignored_nr, cmp_name);
 	if (dir->untracked) {
-- 
2.11.0.390.gc69c2f50cf-goog
Previous: Brandon WilliamsNext: Brandon Williams
Message 117 of 142 in “pathspec cleanup”
  1. 00/17 pathspec cleanupBrandon Williams, Dec 6, 2016
  2. 01/17 mv: convert to using pathspec struct interfaceBrandon Williams, Dec 6, 2016
  3. Duy NguyenDec 7, 2016
  4. Brandon WilliamsDec 8, 2016
  5. Duy NguyenDec 8, 2016
  6. Brandon WilliamsDec 8, 2016
  7. 02/17 dir: convert create_simplify to use the pathspec struct interfaceBrandon Williams, Dec 6, 2016
  8. Duy NguyenDec 7, 2016
  9. Brandon WilliamsDec 8, 2016
  10. Duy NguyenDec 8, 2016
  11. Brandon WilliamsDec 8, 2016
  12. Duy NguyenDec 9, 2016
  13. Brandon WilliamsDec 9, 2016
  14. Brandon WilliamsDec 13, 2016
  15. 03/17 dir: convert fill_directory to use the pathspec struct interfaceBrandon Williams, Dec 6, 2016
  16. Duy NguyenDec 7, 2016
  17. Brandon WilliamsDec 7, 2016
  18. 10/17 pathspec: simpler logic to prefix original pathspec elementsBrandon Williams, Dec 6, 2016
  19. Stefan BellerDec 6, 2016
  20. Brandon WilliamsDec 6, 2016
  21. 08/17 pathspec: remove unused variable from unsupported_magicBrandon Williams, Dec 6, 2016
  22. 09/17 pathspec: always show mnemonic and name in unsupported_magicBrandon Williams, Dec 6, 2016
  23. Duy NguyenDec 7, 2016
  24. Brandon WilliamsDec 7, 2016
  25. Duy NguyenDec 7, 2016
  26. Brandon WilliamsDec 7, 2016
  27. 16/17 pathspec: small readability changesBrandon Williams, Dec 6, 2016
  28. Stefan BellerDec 6, 2016
  29. Duy NguyenDec 7, 2016
  30. Brandon WilliamsDec 7, 2016
  31. Duy NguyenDec 8, 2016
  32. Duy NguyenDec 7, 2016
  33. Junio C HamanoDec 7, 2016
  34. Brandon WilliamsDec 7, 2016
  35. 13/17 pathspec: create parse_long_magic functionBrandon Williams, Dec 6, 2016
  36. 14/17 pathspec: create parse_element_magic helperBrandon Williams, Dec 6, 2016
  37. 11/17 pathspec: factor global magic into its own functionBrandon Williams, Dec 6, 2016
  38. Duy NguyenDec 7, 2016
  39. Brandon WilliamsDec 7, 2016
  40. Duy NguyenDec 8, 2016
  41. 12/17 pathspec: create parse_short_magic functionBrandon Williams, Dec 6, 2016
  42. 07/17 mv: small code cleanupBrandon Williams, Dec 6, 2016
  43. 06/17 pathspec: copy and free owned memoryBrandon Williams, Dec 6, 2016
  44. 04/17 ls-tree: convert show_recursive to use the pathspec struct interfaceBrandon Williams, Dec 6, 2016
  45. Duy NguyenDec 7, 2016
  46. Brandon WilliamsDec 7, 2016
  47. 05/17 pathspec: remove the deprecated get_pathspec functionBrandon Williams, Dec 6, 2016
  48. 17/17 pathspec: remove outdated commentBrandon Williams, Dec 6, 2016
  49. 15/17 pathspec: create strip submodule slash helpersBrandon Williams, Dec 6, 2016
  50. Junio C HamanoDec 7, 2016
  51. 00/16 pathspec cleanupBrandon Williams, Dec 8, 2016
  52. 01/16 mv: remove use of deprecated 'get_pathspec()'Brandon Williams, Dec 8, 2016
  53. 02/16 dir: convert create_simplify to use the pathspec struct interfaceBrandon Williams, Dec 8, 2016
  54. 03/16 dir: convert fill_directory to use the pathspec struct interfaceBrandon Williams, Dec 8, 2016
  55. 06/16 pathspec: copy and free owned memoryBrandon Williams, Dec 8, 2016
  56. 11/16 pathspec: create parse_short_magic functionBrandon Williams, Dec 8, 2016
  57. 10/16 pathspec: factor global magic into its own functionBrandon Williams, Dec 8, 2016
  58. 09/16 pathspec: simpler logic to prefix original pathspec elementsBrandon Williams, Dec 8, 2016
  59. 12/16 pathspec: create parse_long_magic functionBrandon Williams, Dec 8, 2016
  60. Junio C HamanoDec 9, 2016
  61. Stefan BellerDec 9, 2016
  62. Brandon WilliamsDec 10, 2016
  63. Junio C HamanoDec 10, 2016
  64. Stefan BellerDec 12, 2016
  65. Junio C HamanoDec 12, 2016
  66. 16/16 pathspec: rename prefix_pathspec to init_pathspec_itemBrandon Williams, Dec 8, 2016
  67. 13/16 pathspec: create parse_element_magic helperBrandon Williams, Dec 8, 2016
  68. 15/16 pathspec: small readability changesBrandon Williams, Dec 8, 2016
  69. 14/16 pathspec: create strip submodule slash helpersBrandon Williams, Dec 8, 2016
  70. Junio C HamanoDec 9, 2016
  71. Duy NguyenDec 9, 2016
  72. 14/16 pathspec: create strip submodule slash helpersBrandon Williams, Dec 9, 2016
  73. Stefan BellerDec 9, 2016
  74. Brandon WilliamsDec 9, 2016
  75. 08/16 pathspec: always show mnemonic and name in unsupported_magicBrandon Williams, Dec 8, 2016
  76. 04/16 ls-tree: convert show_recursive to use the pathspec struct interfaceBrandon Williams, Dec 8, 2016
  77. 05/16 pathspec: remove the deprecated get_pathspec functionBrandon Williams, Dec 8, 2016
  78. 07/16 pathspec: remove unused variable from unsupported_magicBrandon Williams, Dec 8, 2016
  79. Junio C HamanoDec 9, 2016
  80. Brandon WilliamsDec 9, 2016
  81. 00/16 pathspec cleanupBrandon Williams, Dec 13, 2016
  82. 02/16 dir: remove struct path_simplifyBrandon Williams, Dec 13, 2016
  83. Stefan BellerDec 19, 2016
  84. Duy NguyenJan 3, 2017
  85. 04/16 ls-tree: convert show_recursive to use the pathspec struct interfaceBrandon Williams, Dec 13, 2016
  86. 03/16 dir: convert fill_directory to use the pathspec struct interfaceBrandon Williams, Dec 13, 2016
  87. 07/16 pathspec: remove unused variable from unsupported_magicBrandon Williams, Dec 13, 2016
  88. 08/16 pathspec: always show mnemonic and name in unsupported_magicBrandon Williams, Dec 13, 2016
  89. Duy NguyenJan 3, 2017
  90. Brandon WilliamsJan 3, 2017
  91. 06/16 pathspec: copy and free owned memoryBrandon Williams, Dec 13, 2016
  92. Duy NguyenJan 3, 2017
  93. 01/16 mv: remove use of deprecated 'get_pathspec()'Brandon Williams, Dec 13, 2016
  94. 09/16 pathspec: simpler logic to prefix original pathspec elementsBrandon Williams, Dec 13, 2016
  95. 05/16 pathspec: remove the deprecated get_pathspec functionBrandon Williams, Dec 13, 2016
  96. 13/16 pathspec: create parse_element_magic helperBrandon Williams, Dec 13, 2016
  97. 15/16 pathspec: small readability changesBrandon Williams, Dec 13, 2016
  98. 14/16 pathspec: create strip submodule slash helpersBrandon Williams, Dec 13, 2016
  99. 12/16 pathspec: create parse_long_magic functionBrandon Williams, Dec 13, 2016
  100. 16/16 pathspec: rename prefix_pathspec to init_pathspec_itemBrandon Williams, Dec 13, 2016
  101. 11/16 pathspec: create parse_short_magic functionBrandon Williams, Dec 13, 2016
  102. 10/16 pathspec: factor global magic into its own functionBrandon Williams, Dec 13, 2016
  103. 00/16 pathspec cleanupBrandon Williams, Jan 3, 2017
  104. 03/16 dir: convert fill_directory to use the pathspec struct interfaceBrandon Williams, Jan 3, 2017
  105. 10/16 pathspec: factor global magic into its own functionBrandon Williams, Jan 3, 2017
  106. 04/16 ls-tree: convert show_recursive to use the pathspec struct interfaceBrandon Williams, Jan 3, 2017
  107. 01/16 mv: remove use of deprecated 'get_pathspec()'Brandon Williams, Jan 3, 2017
  108. 09/16 pathspec: simpler logic to prefix original pathspec elementsBrandon Williams, Jan 3, 2017
  109. 14/16 pathspec: create strip submodule slash helpersBrandon Williams, Jan 3, 2017
  110. 08/16 pathspec: always show mnemonic and name in unsupported_magicBrandon Williams, Jan 3, 2017
  111. 07/16 pathspec: remove unused variable from unsupported_magicBrandon Williams, Jan 3, 2017
  112. 05/16 pathspec: remove the deprecated get_pathspec functionBrandon Williams, Jan 3, 2017
  113. 13/16 pathspec: create parse_element_magic helperBrandon Williams, Jan 3, 2017
  114. 11/16 pathspec: create parse_short_magic functionBrandon Williams, Jan 3, 2017
  115. 06/16 pathspec: copy and free owned memoryBrandon Williams, Jan 3, 2017
  116. 15/16 pathspec: small readability changesBrandon Williams, Jan 3, 2017
  117. 02/16 dir: remove struct path_simplifyBrandon Williams, Jan 3, 2017
  118. 12/16 pathspec: create parse_long_magic functionBrandon Williams, Jan 3, 2017
  119. 16/16 pathspec: rename prefix_pathspec to init_pathspec_itemBrandon Williams, Jan 3, 2017
  120. Duy NguyenJan 4, 2017
  121. Brandon WilliamsJan 4, 2017
  122. Brandon WilliamsJan 4, 2017
  123. 00/16 pathspec cleanupBrandon Williams, Jan 4, 2017
  124. 15/16 pathspec: small readability changesBrandon Williams, Jan 4, 2017
  125. 13/16 pathspec: create parse_element_magic helperBrandon Williams, Jan 4, 2017
  126. 12/16 pathspec: create parse_long_magic functionBrandon Williams, Jan 4, 2017
  127. 10/16 pathspec: factor global magic into its own functionBrandon Williams, Jan 4, 2017
  128. 08/16 pathspec: always show mnemonic and name in unsupported_magicBrandon Williams, Jan 4, 2017
  129. 09/16 pathspec: simpler logic to prefix original pathspec elementsBrandon Williams, Jan 4, 2017
  130. 16/16 pathspec: rename prefix_pathspec to init_pathspec_itemBrandon Williams, Jan 4, 2017
  131. 14/16 pathspec: create strip submodule slash helpersBrandon Williams, Jan 4, 2017
  132. 07/16 pathspec: remove unused variable from unsupported_magicBrandon Williams, Jan 4, 2017
  133. 11/16 pathspec: create parse_short_magic functionBrandon Williams, Jan 4, 2017
  134. 04/16 ls-tree: convert show_recursive to use the pathspec struct interfaceBrandon Williams, Jan 4, 2017
  135. 02/16 dir: remove struct path_simplifyBrandon Williams, Jan 4, 2017
  136. 03/16 dir: convert fill_directory to use the pathspec struct interfaceBrandon Williams, Jan 4, 2017
  137. 01/16 mv: remove use of deprecated 'get_pathspec()'Brandon Williams, Jan 4, 2017
  138. 05/16 pathspec: remove the deprecated get_pathspec functionBrandon Williams, Jan 4, 2017
  139. 06/16 pathspec: copy and free owned memoryBrandon Williams, Jan 4, 2017
  140. Duy NguyenJan 7, 2017
  141. Junio C HamanoJan 9, 2017
  142. Brandon WilliamsJan 9, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.