dir: remove struct path_simplify
[git] / dir.c
1 /*
2  * This handles recursive filename detection with exclude
3  * files, index knowledge etc..
4  *
5  * See Documentation/technical/api-directory-listing.txt
6  *
7  * Copyright (C) Linus Torvalds, 2005-2006
8  *               Junio Hamano, 2005-2006
9  */
10 #include "cache.h"
11 #include "dir.h"
12 #include "refs.h"
13 #include "wildmatch.h"
14 #include "pathspec.h"
15 #include "utf8.h"
16 #include "varint.h"
17 #include "ewah/ewok.h"
18
19 /*
20  * Tells read_directory_recursive how a file or directory should be treated.
21  * Values are ordered by significance, e.g. if a directory contains both
22  * excluded and untracked files, it is listed as untracked because
23  * path_untracked > path_excluded.
24  */
25 enum path_treatment {
26         path_none = 0,
27         path_recurse,
28         path_excluded,
29         path_untracked
30 };
31
32 /*
33  * Support data structure for our opendir/readdir/closedir wrappers
34  */
35 struct cached_dir {
36         DIR *fdir;
37         struct untracked_cache_dir *untracked;
38         int nr_files;
39         int nr_dirs;
40
41         struct dirent *de;
42         const char *file;
43         struct untracked_cache_dir *ucd;
44 };
45
46 static enum path_treatment read_directory_recursive(struct dir_struct *dir,
47         const char *path, int len, struct untracked_cache_dir *untracked,
48         int check_only, const struct pathspec *pathspec);
49 static int get_dtype(struct dirent *de, const char *path, int len);
50
51 int fspathcmp(const char *a, const char *b)
52 {
53         return ignore_case ? strcasecmp(a, b) : strcmp(a, b);
54 }
55
56 int fspathncmp(const char *a, const char *b, size_t count)
57 {
58         return ignore_case ? strncasecmp(a, b, count) : strncmp(a, b, count);
59 }
60
61 int git_fnmatch(const struct pathspec_item *item,
62                 const char *pattern, const char *string,
63                 int prefix)
64 {
65         if (prefix > 0) {
66                 if (ps_strncmp(item, pattern, string, prefix))
67                         return WM_NOMATCH;
68                 pattern += prefix;
69                 string += prefix;
70         }
71         if (item->flags & PATHSPEC_ONESTAR) {
72                 int pattern_len = strlen(++pattern);
73                 int string_len = strlen(string);
74                 return string_len < pattern_len ||
75                         ps_strcmp(item, pattern,
76                                   string + string_len - pattern_len);
77         }
78         if (item->magic & PATHSPEC_GLOB)
79                 return wildmatch(pattern, string,
80                                  WM_PATHNAME |
81                                  (item->magic & PATHSPEC_ICASE ? WM_CASEFOLD : 0),
82                                  NULL);
83         else
84                 /* wildmatch has not learned no FNM_PATHNAME mode yet */
85                 return wildmatch(pattern, string,
86                                  item->magic & PATHSPEC_ICASE ? WM_CASEFOLD : 0,
87                                  NULL);
88 }
89
90 static int fnmatch_icase_mem(const char *pattern, int patternlen,
91                              const char *string, int stringlen,
92                              int flags)
93 {
94         int match_status;
95         struct strbuf pat_buf = STRBUF_INIT;
96         struct strbuf str_buf = STRBUF_INIT;
97         const char *use_pat = pattern;
98         const char *use_str = string;
99
100         if (pattern[patternlen]) {
101                 strbuf_add(&pat_buf, pattern, patternlen);
102                 use_pat = pat_buf.buf;
103         }
104         if (string[stringlen]) {
105                 strbuf_add(&str_buf, string, stringlen);
106                 use_str = str_buf.buf;
107         }
108
109         if (ignore_case)
110                 flags |= WM_CASEFOLD;
111         match_status = wildmatch(use_pat, use_str, flags, NULL);
112
113         strbuf_release(&pat_buf);
114         strbuf_release(&str_buf);
115
116         return match_status;
117 }
118
119 static size_t common_prefix_len(const struct pathspec *pathspec)
120 {
121         int n;
122         size_t max = 0;
123
124         /*
125          * ":(icase)path" is treated as a pathspec full of
126          * wildcard. In other words, only prefix is considered common
127          * prefix. If the pathspec is abc/foo abc/bar, running in
128          * subdir xyz, the common prefix is still xyz, not xuz/abc as
129          * in non-:(icase).
130          */
131         GUARD_PATHSPEC(pathspec,
132                        PATHSPEC_FROMTOP |
133                        PATHSPEC_MAXDEPTH |
134                        PATHSPEC_LITERAL |
135                        PATHSPEC_GLOB |
136                        PATHSPEC_ICASE |
137                        PATHSPEC_EXCLUDE);
138
139         for (n = 0; n < pathspec->nr; n++) {
140                 size_t i = 0, len = 0, item_len;
141                 if (pathspec->items[n].magic & PATHSPEC_EXCLUDE)
142                         continue;
143                 if (pathspec->items[n].magic & PATHSPEC_ICASE)
144                         item_len = pathspec->items[n].prefix;
145                 else
146                         item_len = pathspec->items[n].nowildcard_len;
147                 while (i < item_len && (n == 0 || i < max)) {
148                         char c = pathspec->items[n].match[i];
149                         if (c != pathspec->items[0].match[i])
150                                 break;
151                         if (c == '/')
152                                 len = i + 1;
153                         i++;
154                 }
155                 if (n == 0 || len < max) {
156                         max = len;
157                         if (!max)
158                                 break;
159                 }
160         }
161         return max;
162 }
163
164 /*
165  * Returns a copy of the longest leading path common among all
166  * pathspecs.
167  */
168 char *common_prefix(const struct pathspec *pathspec)
169 {
170         unsigned long len = common_prefix_len(pathspec);
171
172         return len ? xmemdupz(pathspec->items[0].match, len) : NULL;
173 }
174
175 int fill_directory(struct dir_struct *dir, const struct pathspec *pathspec)
176 {
177         size_t len;
178
179         /*
180          * Calculate common prefix for the pathspec, and
181          * use that to optimize the directory walk
182          */
183         len = common_prefix_len(pathspec);
184
185         /* Read the directory and prune it */
186         read_directory(dir, pathspec->nr ? pathspec->_raw[0] : "", len, pathspec);
187         return len;
188 }
189
190 int within_depth(const char *name, int namelen,
191                         int depth, int max_depth)
192 {
193         const char *cp = name, *cpe = name + namelen;
194
195         while (cp < cpe) {
196                 if (*cp++ != '/')
197                         continue;
198                 depth++;
199                 if (depth > max_depth)
200                         return 0;
201         }
202         return 1;
203 }
204
205 #define DO_MATCH_EXCLUDE   (1<<0)
206 #define DO_MATCH_DIRECTORY (1<<1)
207 #define DO_MATCH_SUBMODULE (1<<2)
208
209 /*
210  * Does 'match' match the given name?
211  * A match is found if
212  *
213  * (1) the 'match' string is leading directory of 'name', or
214  * (2) the 'match' string is a wildcard and matches 'name', or
215  * (3) the 'match' string is exactly the same as 'name'.
216  *
217  * and the return value tells which case it was.
218  *
219  * It returns 0 when there is no match.
220  */
221 static int match_pathspec_item(const struct pathspec_item *item, int prefix,
222                                const char *name, int namelen, unsigned flags)
223 {
224         /* name/namelen has prefix cut off by caller */
225         const char *match = item->match + prefix;
226         int matchlen = item->len - prefix;
227
228         /*
229          * The normal call pattern is:
230          * 1. prefix = common_prefix_len(ps);
231          * 2. prune something, or fill_directory
232          * 3. match_pathspec()
233          *
234          * 'prefix' at #1 may be shorter than the command's prefix and
235          * it's ok for #2 to match extra files. Those extras will be
236          * trimmed at #3.
237          *
238          * Suppose the pathspec is 'foo' and '../bar' running from
239          * subdir 'xyz'. The common prefix at #1 will be empty, thanks
240          * to "../". We may have xyz/foo _and_ XYZ/foo after #2. The
241          * user does not want XYZ/foo, only the "foo" part should be
242          * case-insensitive. We need to filter out XYZ/foo here. In
243          * other words, we do not trust the caller on comparing the
244          * prefix part when :(icase) is involved. We do exact
245          * comparison ourselves.
246          *
247          * Normally the caller (common_prefix_len() in fact) does
248          * _exact_ matching on name[-prefix+1..-1] and we do not need
249          * to check that part. Be defensive and check it anyway, in
250          * case common_prefix_len is changed, or a new caller is
251          * introduced that does not use common_prefix_len.
252          *
253          * If the penalty turns out too high when prefix is really
254          * long, maybe change it to
255          * strncmp(match, name, item->prefix - prefix)
256          */
257         if (item->prefix && (item->magic & PATHSPEC_ICASE) &&
258             strncmp(item->match, name - prefix, item->prefix))
259                 return 0;
260
261         /* If the match was just the prefix, we matched */
262         if (!*match)
263                 return MATCHED_RECURSIVELY;
264
265         if (matchlen <= namelen && !ps_strncmp(item, match, name, matchlen)) {
266                 if (matchlen == namelen)
267                         return MATCHED_EXACTLY;
268
269                 if (match[matchlen-1] == '/' || name[matchlen] == '/')
270                         return MATCHED_RECURSIVELY;
271         } else if ((flags & DO_MATCH_DIRECTORY) &&
272                    match[matchlen - 1] == '/' &&
273                    namelen == matchlen - 1 &&
274                    !ps_strncmp(item, match, name, namelen))
275                 return MATCHED_EXACTLY;
276
277         if (item->nowildcard_len < item->len &&
278             !git_fnmatch(item, match, name,
279                          item->nowildcard_len - prefix))
280                 return MATCHED_FNMATCH;
281
282         /* Perform checks to see if "name" is a super set of the pathspec */
283         if (flags & DO_MATCH_SUBMODULE) {
284                 /* name is a literal prefix of the pathspec */
285                 if ((namelen < matchlen) &&
286                     (match[namelen] == '/') &&
287                     !ps_strncmp(item, match, name, namelen))
288                         return MATCHED_RECURSIVELY;
289
290                 /* name" doesn't match up to the first wild character */
291                 if (item->nowildcard_len < item->len &&
292                     ps_strncmp(item, match, name,
293                                item->nowildcard_len - prefix))
294                         return 0;
295
296                 /*
297                  * Here is where we would perform a wildmatch to check if
298                  * "name" can be matched as a directory (or a prefix) against
299                  * the pathspec.  Since wildmatch doesn't have this capability
300                  * at the present we have to punt and say that it is a match,
301                  * potentially returning a false positive
302                  * The submodules themselves will be able to perform more
303                  * accurate matching to determine if the pathspec matches.
304                  */
305                 return MATCHED_RECURSIVELY;
306         }
307
308         return 0;
309 }
310
311 /*
312  * Given a name and a list of pathspecs, returns the nature of the
313  * closest (i.e. most specific) match of the name to any of the
314  * pathspecs.
315  *
316  * The caller typically calls this multiple times with the same
317  * pathspec and seen[] array but with different name/namelen
318  * (e.g. entries from the index) and is interested in seeing if and
319  * how each pathspec matches all the names it calls this function
320  * with.  A mark is left in the seen[] array for each pathspec element
321  * indicating the closest type of match that element achieved, so if
322  * seen[n] remains zero after multiple invocations, that means the nth
323  * pathspec did not match any names, which could indicate that the
324  * user mistyped the nth pathspec.
325  */
326 static int do_match_pathspec(const struct pathspec *ps,
327                              const char *name, int namelen,
328                              int prefix, char *seen,
329                              unsigned flags)
330 {
331         int i, retval = 0, exclude = flags & DO_MATCH_EXCLUDE;
332
333         GUARD_PATHSPEC(ps,
334                        PATHSPEC_FROMTOP |
335                        PATHSPEC_MAXDEPTH |
336                        PATHSPEC_LITERAL |
337                        PATHSPEC_GLOB |
338                        PATHSPEC_ICASE |
339                        PATHSPEC_EXCLUDE);
340
341         if (!ps->nr) {
342                 if (!ps->recursive ||
343                     !(ps->magic & PATHSPEC_MAXDEPTH) ||
344                     ps->max_depth == -1)
345                         return MATCHED_RECURSIVELY;
346
347                 if (within_depth(name, namelen, 0, ps->max_depth))
348                         return MATCHED_EXACTLY;
349                 else
350                         return 0;
351         }
352
353         name += prefix;
354         namelen -= prefix;
355
356         for (i = ps->nr - 1; i >= 0; i--) {
357                 int how;
358
359                 if ((!exclude &&   ps->items[i].magic & PATHSPEC_EXCLUDE) ||
360                     ( exclude && !(ps->items[i].magic & PATHSPEC_EXCLUDE)))
361                         continue;
362
363                 if (seen && seen[i] == MATCHED_EXACTLY)
364                         continue;
365                 /*
366                  * Make exclude patterns optional and never report
367                  * "pathspec ':(exclude)foo' matches no files"
368                  */
369                 if (seen && ps->items[i].magic & PATHSPEC_EXCLUDE)
370                         seen[i] = MATCHED_FNMATCH;
371                 how = match_pathspec_item(ps->items+i, prefix, name,
372                                           namelen, flags);
373                 if (ps->recursive &&
374                     (ps->magic & PATHSPEC_MAXDEPTH) &&
375                     ps->max_depth != -1 &&
376                     how && how != MATCHED_FNMATCH) {
377                         int len = ps->items[i].len;
378                         if (name[len] == '/')
379                                 len++;
380                         if (within_depth(name+len, namelen-len, 0, ps->max_depth))
381                                 how = MATCHED_EXACTLY;
382                         else
383                                 how = 0;
384                 }
385                 if (how) {
386                         if (retval < how)
387                                 retval = how;
388                         if (seen && seen[i] < how)
389                                 seen[i] = how;
390                 }
391         }
392         return retval;
393 }
394
395 int match_pathspec(const struct pathspec *ps,
396                    const char *name, int namelen,
397                    int prefix, char *seen, int is_dir)
398 {
399         int positive, negative;
400         unsigned flags = is_dir ? DO_MATCH_DIRECTORY : 0;
401         positive = do_match_pathspec(ps, name, namelen,
402                                      prefix, seen, flags);
403         if (!(ps->magic & PATHSPEC_EXCLUDE) || !positive)
404                 return positive;
405         negative = do_match_pathspec(ps, name, namelen,
406                                      prefix, seen,
407                                      flags | DO_MATCH_EXCLUDE);
408         return negative ? 0 : positive;
409 }
410
411 /**
412  * Check if a submodule is a superset of the pathspec
413  */
414 int submodule_path_match(const struct pathspec *ps,
415                          const char *submodule_name,
416                          char *seen)
417 {
418         int matched = do_match_pathspec(ps, submodule_name,
419                                         strlen(submodule_name),
420                                         0, seen,
421                                         DO_MATCH_DIRECTORY |
422                                         DO_MATCH_SUBMODULE);
423         return matched;
424 }
425
426 int report_path_error(const char *ps_matched,
427                       const struct pathspec *pathspec,
428                       const char *prefix)
429 {
430         /*
431          * Make sure all pathspec matched; otherwise it is an error.
432          */
433         int num, errors = 0;
434         for (num = 0; num < pathspec->nr; num++) {
435                 int other, found_dup;
436
437                 if (ps_matched[num])
438                         continue;
439                 /*
440                  * The caller might have fed identical pathspec
441                  * twice.  Do not barf on such a mistake.
442                  * FIXME: parse_pathspec should have eliminated
443                  * duplicate pathspec.
444                  */
445                 for (found_dup = other = 0;
446                      !found_dup && other < pathspec->nr;
447                      other++) {
448                         if (other == num || !ps_matched[other])
449                                 continue;
450                         if (!strcmp(pathspec->items[other].original,
451                                     pathspec->items[num].original))
452                                 /*
453                                  * Ok, we have a match already.
454                                  */
455                                 found_dup = 1;
456                 }
457                 if (found_dup)
458                         continue;
459
460                 error("pathspec '%s' did not match any file(s) known to git.",
461                       pathspec->items[num].original);
462                 errors++;
463         }
464         return errors;
465 }
466
467 /*
468  * Return the length of the "simple" part of a path match limiter.
469  */
470 int simple_length(const char *match)
471 {
472         int len = -1;
473
474         for (;;) {
475                 unsigned char c = *match++;
476                 len++;
477                 if (c == '\0' || is_glob_special(c))
478                         return len;
479         }
480 }
481
482 int no_wildcard(const char *string)
483 {
484         return string[simple_length(string)] == '\0';
485 }
486
487 void parse_exclude_pattern(const char **pattern,
488                            int *patternlen,
489                            unsigned *flags,
490                            int *nowildcardlen)
491 {
492         const char *p = *pattern;
493         size_t i, len;
494
495         *flags = 0;
496         if (*p == '!') {
497                 *flags |= EXC_FLAG_NEGATIVE;
498                 p++;
499         }
500         len = strlen(p);
501         if (len && p[len - 1] == '/') {
502                 len--;
503                 *flags |= EXC_FLAG_MUSTBEDIR;
504         }
505         for (i = 0; i < len; i++) {
506                 if (p[i] == '/')
507                         break;
508         }
509         if (i == len)
510                 *flags |= EXC_FLAG_NODIR;
511         *nowildcardlen = simple_length(p);
512         /*
513          * we should have excluded the trailing slash from 'p' too,
514          * but that's one more allocation. Instead just make sure
515          * nowildcardlen does not exceed real patternlen
516          */
517         if (*nowildcardlen > len)
518                 *nowildcardlen = len;
519         if (*p == '*' && no_wildcard(p + 1))
520                 *flags |= EXC_FLAG_ENDSWITH;
521         *pattern = p;
522         *patternlen = len;
523 }
524
525 void add_exclude(const char *string, const char *base,
526                  int baselen, struct exclude_list *el, int srcpos)
527 {
528         struct exclude *x;
529         int patternlen;
530         unsigned flags;
531         int nowildcardlen;
532
533         parse_exclude_pattern(&string, &patternlen, &flags, &nowildcardlen);
534         if (flags & EXC_FLAG_MUSTBEDIR) {
535                 FLEXPTR_ALLOC_MEM(x, pattern, string, patternlen);
536         } else {
537                 x = xmalloc(sizeof(*x));
538                 x->pattern = string;
539         }
540         x->patternlen = patternlen;
541         x->nowildcardlen = nowildcardlen;
542         x->base = base;
543         x->baselen = baselen;
544         x->flags = flags;
545         x->srcpos = srcpos;
546         ALLOC_GROW(el->excludes, el->nr + 1, el->alloc);
547         el->excludes[el->nr++] = x;
548         x->el = el;
549 }
550
551 static void *read_skip_worktree_file_from_index(const char *path, size_t *size,
552                                                 struct sha1_stat *sha1_stat)
553 {
554         int pos, len;
555         unsigned long sz;
556         enum object_type type;
557         void *data;
558
559         len = strlen(path);
560         pos = cache_name_pos(path, len);
561         if (pos < 0)
562                 return NULL;
563         if (!ce_skip_worktree(active_cache[pos]))
564                 return NULL;
565         data = read_sha1_file(active_cache[pos]->oid.hash, &type, &sz);
566         if (!data || type != OBJ_BLOB) {
567                 free(data);
568                 return NULL;
569         }
570         *size = xsize_t(sz);
571         if (sha1_stat) {
572                 memset(&sha1_stat->stat, 0, sizeof(sha1_stat->stat));
573                 hashcpy(sha1_stat->sha1, active_cache[pos]->oid.hash);
574         }
575         return data;
576 }
577
578 /*
579  * Frees memory within el which was allocated for exclude patterns and
580  * the file buffer.  Does not free el itself.
581  */
582 void clear_exclude_list(struct exclude_list *el)
583 {
584         int i;
585
586         for (i = 0; i < el->nr; i++)
587                 free(el->excludes[i]);
588         free(el->excludes);
589         free(el->filebuf);
590
591         memset(el, 0, sizeof(*el));
592 }
593
594 static void trim_trailing_spaces(char *buf)
595 {
596         char *p, *last_space = NULL;
597
598         for (p = buf; *p; p++)
599                 switch (*p) {
600                 case ' ':
601                         if (!last_space)
602                                 last_space = p;
603                         break;
604                 case '\\':
605                         p++;
606                         if (!*p)
607                                 return;
608                         /* fallthrough */
609                 default:
610                         last_space = NULL;
611                 }
612
613         if (last_space)
614                 *last_space = '\0';
615 }
616
617 /*
618  * Given a subdirectory name and "dir" of the current directory,
619  * search the subdir in "dir" and return it, or create a new one if it
620  * does not exist in "dir".
621  *
622  * If "name" has the trailing slash, it'll be excluded in the search.
623  */
624 static struct untracked_cache_dir *lookup_untracked(struct untracked_cache *uc,
625                                                     struct untracked_cache_dir *dir,
626                                                     const char *name, int len)
627 {
628         int first, last;
629         struct untracked_cache_dir *d;
630         if (!dir)
631                 return NULL;
632         if (len && name[len - 1] == '/')
633                 len--;
634         first = 0;
635         last = dir->dirs_nr;
636         while (last > first) {
637                 int cmp, next = (last + first) >> 1;
638                 d = dir->dirs[next];
639                 cmp = strncmp(name, d->name, len);
640                 if (!cmp && strlen(d->name) > len)
641                         cmp = -1;
642                 if (!cmp)
643                         return d;
644                 if (cmp < 0) {
645                         last = next;
646                         continue;
647                 }
648                 first = next+1;
649         }
650
651         uc->dir_created++;
652         FLEX_ALLOC_MEM(d, name, name, len);
653
654         ALLOC_GROW(dir->dirs, dir->dirs_nr + 1, dir->dirs_alloc);
655         memmove(dir->dirs + first + 1, dir->dirs + first,
656                 (dir->dirs_nr - first) * sizeof(*dir->dirs));
657         dir->dirs_nr++;
658         dir->dirs[first] = d;
659         return d;
660 }
661
662 static void do_invalidate_gitignore(struct untracked_cache_dir *dir)
663 {
664         int i;
665         dir->valid = 0;
666         dir->untracked_nr = 0;
667         for (i = 0; i < dir->dirs_nr; i++)
668                 do_invalidate_gitignore(dir->dirs[i]);
669 }
670
671 static void invalidate_gitignore(struct untracked_cache *uc,
672                                  struct untracked_cache_dir *dir)
673 {
674         uc->gitignore_invalidated++;
675         do_invalidate_gitignore(dir);
676 }
677
678 static void invalidate_directory(struct untracked_cache *uc,
679                                  struct untracked_cache_dir *dir)
680 {
681         int i;
682         uc->dir_invalidated++;
683         dir->valid = 0;
684         dir->untracked_nr = 0;
685         for (i = 0; i < dir->dirs_nr; i++)
686                 dir->dirs[i]->recurse = 0;
687 }
688
689 /*
690  * Given a file with name "fname", read it (either from disk, or from
691  * the index if "check_index" is non-zero), parse it and store the
692  * exclude rules in "el".
693  *
694  * If "ss" is not NULL, compute SHA-1 of the exclude file and fill
695  * stat data from disk (only valid if add_excludes returns zero). If
696  * ss_valid is non-zero, "ss" must contain good value as input.
697  */
698 static int add_excludes(const char *fname, const char *base, int baselen,
699                         struct exclude_list *el, int check_index,
700                         struct sha1_stat *sha1_stat)
701 {
702         struct stat st;
703         int fd, i, lineno = 1;
704         size_t size = 0;
705         char *buf, *entry;
706
707         fd = open(fname, O_RDONLY);
708         if (fd < 0 || fstat(fd, &st) < 0) {
709                 if (errno != ENOENT)
710                         warn_on_inaccessible(fname);
711                 if (0 <= fd)
712                         close(fd);
713                 if (!check_index ||
714                     (buf = read_skip_worktree_file_from_index(fname, &size, sha1_stat)) == NULL)
715                         return -1;
716                 if (size == 0) {
717                         free(buf);
718                         return 0;
719                 }
720                 if (buf[size-1] != '\n') {
721                         buf = xrealloc(buf, st_add(size, 1));
722                         buf[size++] = '\n';
723                 }
724         } else {
725                 size = xsize_t(st.st_size);
726                 if (size == 0) {
727                         if (sha1_stat) {
728                                 fill_stat_data(&sha1_stat->stat, &st);
729                                 hashcpy(sha1_stat->sha1, EMPTY_BLOB_SHA1_BIN);
730                                 sha1_stat->valid = 1;
731                         }
732                         close(fd);
733                         return 0;
734                 }
735                 buf = xmallocz(size);
736                 if (read_in_full(fd, buf, size) != size) {
737                         free(buf);
738                         close(fd);
739                         return -1;
740                 }
741                 buf[size++] = '\n';
742                 close(fd);
743                 if (sha1_stat) {
744                         int pos;
745                         if (sha1_stat->valid &&
746                             !match_stat_data_racy(&the_index, &sha1_stat->stat, &st))
747                                 ; /* no content change, ss->sha1 still good */
748                         else if (check_index &&
749                                  (pos = cache_name_pos(fname, strlen(fname))) >= 0 &&
750                                  !ce_stage(active_cache[pos]) &&
751                                  ce_uptodate(active_cache[pos]) &&
752                                  !would_convert_to_git(fname))
753                                 hashcpy(sha1_stat->sha1,
754                                         active_cache[pos]->oid.hash);
755                         else
756                                 hash_sha1_file(buf, size, "blob", sha1_stat->sha1);
757                         fill_stat_data(&sha1_stat->stat, &st);
758                         sha1_stat->valid = 1;
759                 }
760         }
761
762         el->filebuf = buf;
763
764         if (skip_utf8_bom(&buf, size))
765                 size -= buf - el->filebuf;
766
767         entry = buf;
768
769         for (i = 0; i < size; i++) {
770                 if (buf[i] == '\n') {
771                         if (entry != buf + i && entry[0] != '#') {
772                                 buf[i - (i && buf[i-1] == '\r')] = 0;
773                                 trim_trailing_spaces(entry);
774                                 add_exclude(entry, base, baselen, el, lineno);
775                         }
776                         lineno++;
777                         entry = buf + i + 1;
778                 }
779         }
780         return 0;
781 }
782
783 int add_excludes_from_file_to_list(const char *fname, const char *base,
784                                    int baselen, struct exclude_list *el,
785                                    int check_index)
786 {
787         return add_excludes(fname, base, baselen, el, check_index, NULL);
788 }
789
790 struct exclude_list *add_exclude_list(struct dir_struct *dir,
791                                       int group_type, const char *src)
792 {
793         struct exclude_list *el;
794         struct exclude_list_group *group;
795
796         group = &dir->exclude_list_group[group_type];
797         ALLOC_GROW(group->el, group->nr + 1, group->alloc);
798         el = &group->el[group->nr++];
799         memset(el, 0, sizeof(*el));
800         el->src = src;
801         return el;
802 }
803
804 /*
805  * Used to set up core.excludesfile and .git/info/exclude lists.
806  */
807 static void add_excludes_from_file_1(struct dir_struct *dir, const char *fname,
808                                      struct sha1_stat *sha1_stat)
809 {
810         struct exclude_list *el;
811         /*
812          * catch setup_standard_excludes() that's called before
813          * dir->untracked is assigned. That function behaves
814          * differently when dir->untracked is non-NULL.
815          */
816         if (!dir->untracked)
817                 dir->unmanaged_exclude_files++;
818         el = add_exclude_list(dir, EXC_FILE, fname);
819         if (add_excludes(fname, "", 0, el, 0, sha1_stat) < 0)
820                 die("cannot use %s as an exclude file", fname);
821 }
822
823 void add_excludes_from_file(struct dir_struct *dir, const char *fname)
824 {
825         dir->unmanaged_exclude_files++; /* see validate_untracked_cache() */
826         add_excludes_from_file_1(dir, fname, NULL);
827 }
828
829 int match_basename(const char *basename, int basenamelen,
830                    const char *pattern, int prefix, int patternlen,
831                    unsigned flags)
832 {
833         if (prefix == patternlen) {
834                 if (patternlen == basenamelen &&
835                     !fspathncmp(pattern, basename, basenamelen))
836                         return 1;
837         } else if (flags & EXC_FLAG_ENDSWITH) {
838                 /* "*literal" matching against "fooliteral" */
839                 if (patternlen - 1 <= basenamelen &&
840                     !fspathncmp(pattern + 1,
841                                    basename + basenamelen - (patternlen - 1),
842                                    patternlen - 1))
843                         return 1;
844         } else {
845                 if (fnmatch_icase_mem(pattern, patternlen,
846                                       basename, basenamelen,
847                                       0) == 0)
848                         return 1;
849         }
850         return 0;
851 }
852
853 int match_pathname(const char *pathname, int pathlen,
854                    const char *base, int baselen,
855                    const char *pattern, int prefix, int patternlen,
856                    unsigned flags)
857 {
858         const char *name;
859         int namelen;
860
861         /*
862          * match with FNM_PATHNAME; the pattern has base implicitly
863          * in front of it.
864          */
865         if (*pattern == '/') {
866                 pattern++;
867                 patternlen--;
868                 prefix--;
869         }
870
871         /*
872          * baselen does not count the trailing slash. base[] may or
873          * may not end with a trailing slash though.
874          */
875         if (pathlen < baselen + 1 ||
876             (baselen && pathname[baselen] != '/') ||
877             fspathncmp(pathname, base, baselen))
878                 return 0;
879
880         namelen = baselen ? pathlen - baselen - 1 : pathlen;
881         name = pathname + pathlen - namelen;
882
883         if (prefix) {
884                 /*
885                  * if the non-wildcard part is longer than the
886                  * remaining pathname, surely it cannot match.
887                  */
888                 if (prefix > namelen)
889                         return 0;
890
891                 if (fspathncmp(pattern, name, prefix))
892                         return 0;
893                 pattern += prefix;
894                 patternlen -= prefix;
895                 name    += prefix;
896                 namelen -= prefix;
897
898                 /*
899                  * If the whole pattern did not have a wildcard,
900                  * then our prefix match is all we need; we
901                  * do not need to call fnmatch at all.
902                  */
903                 if (!patternlen && !namelen)
904                         return 1;
905         }
906
907         return fnmatch_icase_mem(pattern, patternlen,
908                                  name, namelen,
909                                  WM_PATHNAME) == 0;
910 }
911
912 /*
913  * Scan the given exclude list in reverse to see whether pathname
914  * should be ignored.  The first match (i.e. the last on the list), if
915  * any, determines the fate.  Returns the exclude_list element which
916  * matched, or NULL for undecided.
917  */
918 static struct exclude *last_exclude_matching_from_list(const char *pathname,
919                                                        int pathlen,
920                                                        const char *basename,
921                                                        int *dtype,
922                                                        struct exclude_list *el)
923 {
924         struct exclude *exc = NULL; /* undecided */
925         int i;
926
927         if (!el->nr)
928                 return NULL;    /* undefined */
929
930         for (i = el->nr - 1; 0 <= i; i--) {
931                 struct exclude *x = el->excludes[i];
932                 const char *exclude = x->pattern;
933                 int prefix = x->nowildcardlen;
934
935                 if (x->flags & EXC_FLAG_MUSTBEDIR) {
936                         if (*dtype == DT_UNKNOWN)
937                                 *dtype = get_dtype(NULL, pathname, pathlen);
938                         if (*dtype != DT_DIR)
939                                 continue;
940                 }
941
942                 if (x->flags & EXC_FLAG_NODIR) {
943                         if (match_basename(basename,
944                                            pathlen - (basename - pathname),
945                                            exclude, prefix, x->patternlen,
946                                            x->flags)) {
947                                 exc = x;
948                                 break;
949                         }
950                         continue;
951                 }
952
953                 assert(x->baselen == 0 || x->base[x->baselen - 1] == '/');
954                 if (match_pathname(pathname, pathlen,
955                                    x->base, x->baselen ? x->baselen - 1 : 0,
956                                    exclude, prefix, x->patternlen, x->flags)) {
957                         exc = x;
958                         break;
959                 }
960         }
961         return exc;
962 }
963
964 /*
965  * Scan the list and let the last match determine the fate.
966  * Return 1 for exclude, 0 for include and -1 for undecided.
967  */
968 int is_excluded_from_list(const char *pathname,
969                           int pathlen, const char *basename, int *dtype,
970                           struct exclude_list *el)
971 {
972         struct exclude *exclude;
973         exclude = last_exclude_matching_from_list(pathname, pathlen, basename, dtype, el);
974         if (exclude)
975                 return exclude->flags & EXC_FLAG_NEGATIVE ? 0 : 1;
976         return -1; /* undecided */
977 }
978
979 static struct exclude *last_exclude_matching_from_lists(struct dir_struct *dir,
980                 const char *pathname, int pathlen, const char *basename,
981                 int *dtype_p)
982 {
983         int i, j;
984         struct exclude_list_group *group;
985         struct exclude *exclude;
986         for (i = EXC_CMDL; i <= EXC_FILE; i++) {
987                 group = &dir->exclude_list_group[i];
988                 for (j = group->nr - 1; j >= 0; j--) {
989                         exclude = last_exclude_matching_from_list(
990                                 pathname, pathlen, basename, dtype_p,
991                                 &group->el[j]);
992                         if (exclude)
993                                 return exclude;
994                 }
995         }
996         return NULL;
997 }
998
999 /*
1000  * Loads the per-directory exclude list for the substring of base
1001  * which has a char length of baselen.
1002  */
1003 static void prep_exclude(struct dir_struct *dir, const char *base, int baselen)
1004 {
1005         struct exclude_list_group *group;
1006         struct exclude_list *el;
1007         struct exclude_stack *stk = NULL;
1008         struct untracked_cache_dir *untracked;
1009         int current;
1010
1011         group = &dir->exclude_list_group[EXC_DIRS];
1012
1013         /*
1014          * Pop the exclude lists from the EXCL_DIRS exclude_list_group
1015          * which originate from directories not in the prefix of the
1016          * path being checked.
1017          */
1018         while ((stk = dir->exclude_stack) != NULL) {
1019                 if (stk->baselen <= baselen &&
1020                     !strncmp(dir->basebuf.buf, base, stk->baselen))
1021                         break;
1022                 el = &group->el[dir->exclude_stack->exclude_ix];
1023                 dir->exclude_stack = stk->prev;
1024                 dir->exclude = NULL;
1025                 free((char *)el->src); /* see strbuf_detach() below */
1026                 clear_exclude_list(el);
1027                 free(stk);
1028                 group->nr--;
1029         }
1030
1031         /* Skip traversing into sub directories if the parent is excluded */
1032         if (dir->exclude)
1033                 return;
1034
1035         /*
1036          * Lazy initialization. All call sites currently just
1037          * memset(dir, 0, sizeof(*dir)) before use. Changing all of
1038          * them seems lots of work for little benefit.
1039          */
1040         if (!dir->basebuf.buf)
1041                 strbuf_init(&dir->basebuf, PATH_MAX);
1042
1043         /* Read from the parent directories and push them down. */
1044         current = stk ? stk->baselen : -1;
1045         strbuf_setlen(&dir->basebuf, current < 0 ? 0 : current);
1046         if (dir->untracked)
1047                 untracked = stk ? stk->ucd : dir->untracked->root;
1048         else
1049                 untracked = NULL;
1050
1051         while (current < baselen) {
1052                 const char *cp;
1053                 struct sha1_stat sha1_stat;
1054
1055                 stk = xcalloc(1, sizeof(*stk));
1056                 if (current < 0) {
1057                         cp = base;
1058                         current = 0;
1059                 } else {
1060                         cp = strchr(base + current + 1, '/');
1061                         if (!cp)
1062                                 die("oops in prep_exclude");
1063                         cp++;
1064                         untracked =
1065                                 lookup_untracked(dir->untracked, untracked,
1066                                                  base + current,
1067                                                  cp - base - current);
1068                 }
1069                 stk->prev = dir->exclude_stack;
1070                 stk->baselen = cp - base;
1071                 stk->exclude_ix = group->nr;
1072                 stk->ucd = untracked;
1073                 el = add_exclude_list(dir, EXC_DIRS, NULL);
1074                 strbuf_add(&dir->basebuf, base + current, stk->baselen - current);
1075                 assert(stk->baselen == dir->basebuf.len);
1076
1077                 /* Abort if the directory is excluded */
1078                 if (stk->baselen) {
1079                         int dt = DT_DIR;
1080                         dir->basebuf.buf[stk->baselen - 1] = 0;
1081                         dir->exclude = last_exclude_matching_from_lists(dir,
1082                                 dir->basebuf.buf, stk->baselen - 1,
1083                                 dir->basebuf.buf + current, &dt);
1084                         dir->basebuf.buf[stk->baselen - 1] = '/';
1085                         if (dir->exclude &&
1086                             dir->exclude->flags & EXC_FLAG_NEGATIVE)
1087                                 dir->exclude = NULL;
1088                         if (dir->exclude) {
1089                                 dir->exclude_stack = stk;
1090                                 return;
1091                         }
1092                 }
1093
1094                 /* Try to read per-directory file */
1095                 hashclr(sha1_stat.sha1);
1096                 sha1_stat.valid = 0;
1097                 if (dir->exclude_per_dir &&
1098                     /*
1099                      * If we know that no files have been added in
1100                      * this directory (i.e. valid_cached_dir() has
1101                      * been executed and set untracked->valid) ..
1102                      */
1103                     (!untracked || !untracked->valid ||
1104                      /*
1105                       * .. and .gitignore does not exist before
1106                       * (i.e. null exclude_sha1). Then we can skip
1107                       * loading .gitignore, which would result in
1108                       * ENOENT anyway.
1109                       */
1110                      !is_null_sha1(untracked->exclude_sha1))) {
1111                         /*
1112                          * dir->basebuf gets reused by the traversal, but we
1113                          * need fname to remain unchanged to ensure the src
1114                          * member of each struct exclude correctly
1115                          * back-references its source file.  Other invocations
1116                          * of add_exclude_list provide stable strings, so we
1117                          * strbuf_detach() and free() here in the caller.
1118                          */
1119                         struct strbuf sb = STRBUF_INIT;
1120                         strbuf_addbuf(&sb, &dir->basebuf);
1121                         strbuf_addstr(&sb, dir->exclude_per_dir);
1122                         el->src = strbuf_detach(&sb, NULL);
1123                         add_excludes(el->src, el->src, stk->baselen, el, 1,
1124                                      untracked ? &sha1_stat : NULL);
1125                 }
1126                 /*
1127                  * NEEDSWORK: when untracked cache is enabled, prep_exclude()
1128                  * will first be called in valid_cached_dir() then maybe many
1129                  * times more in last_exclude_matching(). When the cache is
1130                  * used, last_exclude_matching() will not be called and
1131                  * reading .gitignore content will be a waste.
1132                  *
1133                  * So when it's called by valid_cached_dir() and we can get
1134                  * .gitignore SHA-1 from the index (i.e. .gitignore is not
1135                  * modified on work tree), we could delay reading the
1136                  * .gitignore content until we absolutely need it in
1137                  * last_exclude_matching(). Be careful about ignore rule
1138                  * order, though, if you do that.
1139                  */
1140                 if (untracked &&
1141                     hashcmp(sha1_stat.sha1, untracked->exclude_sha1)) {
1142                         invalidate_gitignore(dir->untracked, untracked);
1143                         hashcpy(untracked->exclude_sha1, sha1_stat.sha1);
1144                 }
1145                 dir->exclude_stack = stk;
1146                 current = stk->baselen;
1147         }
1148         strbuf_setlen(&dir->basebuf, baselen);
1149 }
1150
1151 /*
1152  * Loads the exclude lists for the directory containing pathname, then
1153  * scans all exclude lists to determine whether pathname is excluded.
1154  * Returns the exclude_list element which matched, or NULL for
1155  * undecided.
1156  */
1157 struct exclude *last_exclude_matching(struct dir_struct *dir,
1158                                              const char *pathname,
1159                                              int *dtype_p)
1160 {
1161         int pathlen = strlen(pathname);
1162         const char *basename = strrchr(pathname, '/');
1163         basename = (basename) ? basename+1 : pathname;
1164
1165         prep_exclude(dir, pathname, basename-pathname);
1166
1167         if (dir->exclude)
1168                 return dir->exclude;
1169
1170         return last_exclude_matching_from_lists(dir, pathname, pathlen,
1171                         basename, dtype_p);
1172 }
1173
1174 /*
1175  * Loads the exclude lists for the directory containing pathname, then
1176  * scans all exclude lists to determine whether pathname is excluded.
1177  * Returns 1 if true, otherwise 0.
1178  */
1179 int is_excluded(struct dir_struct *dir, const char *pathname, int *dtype_p)
1180 {
1181         struct exclude *exclude =
1182                 last_exclude_matching(dir, pathname, dtype_p);
1183         if (exclude)
1184                 return exclude->flags & EXC_FLAG_NEGATIVE ? 0 : 1;
1185         return 0;
1186 }
1187
1188 static struct dir_entry *dir_entry_new(const char *pathname, int len)
1189 {
1190         struct dir_entry *ent;
1191
1192         FLEX_ALLOC_MEM(ent, name, pathname, len);
1193         ent->len = len;
1194         return ent;
1195 }
1196
1197 static struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len)
1198 {
1199         if (cache_file_exists(pathname, len, ignore_case))
1200                 return NULL;
1201
1202         ALLOC_GROW(dir->entries, dir->nr+1, dir->alloc);
1203         return dir->entries[dir->nr++] = dir_entry_new(pathname, len);
1204 }
1205
1206 struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len)
1207 {
1208         if (!cache_name_is_other(pathname, len))
1209                 return NULL;
1210
1211         ALLOC_GROW(dir->ignored, dir->ignored_nr+1, dir->ignored_alloc);
1212         return dir->ignored[dir->ignored_nr++] = dir_entry_new(pathname, len);
1213 }
1214
1215 enum exist_status {
1216         index_nonexistent = 0,
1217         index_directory,
1218         index_gitdir
1219 };
1220
1221 /*
1222  * Do not use the alphabetically sorted index to look up
1223  * the directory name; instead, use the case insensitive
1224  * directory hash.
1225  */
1226 static enum exist_status directory_exists_in_index_icase(const char *dirname, int len)
1227 {
1228         struct cache_entry *ce;
1229
1230         if (cache_dir_exists(dirname, len))
1231                 return index_directory;
1232
1233         ce = cache_file_exists(dirname, len, ignore_case);
1234         if (ce && S_ISGITLINK(ce->ce_mode))
1235                 return index_gitdir;
1236
1237         return index_nonexistent;
1238 }
1239
1240 /*
1241  * The index sorts alphabetically by entry name, which
1242  * means that a gitlink sorts as '\0' at the end, while
1243  * a directory (which is defined not as an entry, but as
1244  * the files it contains) will sort with the '/' at the
1245  * end.
1246  */
1247 static enum exist_status directory_exists_in_index(const char *dirname, int len)
1248 {
1249         int pos;
1250
1251         if (ignore_case)
1252                 return directory_exists_in_index_icase(dirname, len);
1253
1254         pos = cache_name_pos(dirname, len);
1255         if (pos < 0)
1256                 pos = -pos-1;
1257         while (pos < active_nr) {
1258                 const struct cache_entry *ce = active_cache[pos++];
1259                 unsigned char endchar;
1260
1261                 if (strncmp(ce->name, dirname, len))
1262                         break;
1263                 endchar = ce->name[len];
1264                 if (endchar > '/')
1265                         break;
1266                 if (endchar == '/')
1267                         return index_directory;
1268                 if (!endchar && S_ISGITLINK(ce->ce_mode))
1269                         return index_gitdir;
1270         }
1271         return index_nonexistent;
1272 }
1273
1274 /*
1275  * When we find a directory when traversing the filesystem, we
1276  * have three distinct cases:
1277  *
1278  *  - ignore it
1279  *  - see it as a directory
1280  *  - recurse into it
1281  *
1282  * and which one we choose depends on a combination of existing
1283  * git index contents and the flags passed into the directory
1284  * traversal routine.
1285  *
1286  * Case 1: If we *already* have entries in the index under that
1287  * directory name, we always recurse into the directory to see
1288  * all the files.
1289  *
1290  * Case 2: If we *already* have that directory name as a gitlink,
1291  * we always continue to see it as a gitlink, regardless of whether
1292  * there is an actual git directory there or not (it might not
1293  * be checked out as a subproject!)
1294  *
1295  * Case 3: if we didn't have it in the index previously, we
1296  * have a few sub-cases:
1297  *
1298  *  (a) if "show_other_directories" is true, we show it as
1299  *      just a directory, unless "hide_empty_directories" is
1300  *      also true, in which case we need to check if it contains any
1301  *      untracked and / or ignored files.
1302  *  (b) if it looks like a git directory, and we don't have
1303  *      'no_gitlinks' set we treat it as a gitlink, and show it
1304  *      as a directory.
1305  *  (c) otherwise, we recurse into it.
1306  */
1307 static enum path_treatment treat_directory(struct dir_struct *dir,
1308         struct untracked_cache_dir *untracked,
1309         const char *dirname, int len, int baselen, int exclude,
1310         const struct pathspec *pathspec)
1311 {
1312         /* The "len-1" is to strip the final '/' */
1313         switch (directory_exists_in_index(dirname, len-1)) {
1314         case index_directory:
1315                 return path_recurse;
1316
1317         case index_gitdir:
1318                 return path_none;
1319
1320         case index_nonexistent:
1321                 if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)
1322                         break;
1323                 if (!(dir->flags & DIR_NO_GITLINKS)) {
1324                         unsigned char sha1[20];
1325                         if (resolve_gitlink_ref(dirname, "HEAD", sha1) == 0)
1326                                 return path_untracked;
1327                 }
1328                 return path_recurse;
1329         }
1330
1331         /* This is the "show_other_directories" case */
1332
1333         if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
1334                 return exclude ? path_excluded : path_untracked;
1335
1336         untracked = lookup_untracked(dir->untracked, untracked,
1337                                      dirname + baselen, len - baselen);
1338         return read_directory_recursive(dir, dirname, len,
1339                                         untracked, 1, pathspec);
1340 }
1341
1342 /*
1343  * This is an inexact early pruning of any recursive directory
1344  * reading - if the path cannot possibly be in the pathspec,
1345  * return true, and we'll skip it early.
1346  */
1347 static int simplify_away(const char *path, int pathlen,
1348                          const struct pathspec *pathspec)
1349 {
1350         int i;
1351
1352         if (!pathspec || !pathspec->nr)
1353                 return 0;
1354
1355         GUARD_PATHSPEC(pathspec,
1356                        PATHSPEC_FROMTOP |
1357                        PATHSPEC_MAXDEPTH |
1358                        PATHSPEC_LITERAL |
1359                        PATHSPEC_GLOB |
1360                        PATHSPEC_ICASE |
1361                        PATHSPEC_EXCLUDE);
1362
1363         for (i = 0; i < pathspec->nr; i++) {
1364                 const struct pathspec_item *item = &pathspec->items[i];
1365                 int len = item->nowildcard_len;
1366
1367                 if (len > pathlen)
1368                         len = pathlen;
1369                 if (!ps_strncmp(item, item->match, path, len))
1370                         return 0;
1371         }
1372
1373         return 1;
1374 }
1375
1376 /*
1377  * This function tells us whether an excluded path matches a
1378  * list of "interesting" pathspecs. That is, whether a path matched
1379  * by any of the pathspecs could possibly be ignored by excluding
1380  * the specified path. This can happen if:
1381  *
1382  *   1. the path is mentioned explicitly in the pathspec
1383  *
1384  *   2. the path is a directory prefix of some element in the
1385  *      pathspec
1386  */
1387 static int exclude_matches_pathspec(const char *path, int pathlen,
1388                                     const struct pathspec *pathspec)
1389 {
1390         int i;
1391
1392         if (!pathspec || !pathspec->nr)
1393                 return 0;
1394
1395         GUARD_PATHSPEC(pathspec,
1396                        PATHSPEC_FROMTOP |
1397                        PATHSPEC_MAXDEPTH |
1398                        PATHSPEC_LITERAL |
1399                        PATHSPEC_GLOB |
1400                        PATHSPEC_ICASE |
1401                        PATHSPEC_EXCLUDE);
1402
1403         for (i = 0; i < pathspec->nr; i++) {
1404                 const struct pathspec_item *item = &pathspec->items[i];
1405                 int len = item->nowildcard_len;
1406
1407                 if (len == pathlen &&
1408                     !ps_strncmp(item, item->match, path, pathlen))
1409                         return 1;
1410                 if (len > pathlen &&
1411                     item->match[pathlen] == '/' &&
1412                     !ps_strncmp(item, item->match, path, pathlen))
1413                         return 1;
1414         }
1415         return 0;
1416 }
1417
1418 static int get_index_dtype(const char *path, int len)
1419 {
1420         int pos;
1421         const struct cache_entry *ce;
1422
1423         ce = cache_file_exists(path, len, 0);
1424         if (ce) {
1425                 if (!ce_uptodate(ce))
1426                         return DT_UNKNOWN;
1427                 if (S_ISGITLINK(ce->ce_mode))
1428                         return DT_DIR;
1429                 /*
1430                  * Nobody actually cares about the
1431                  * difference between DT_LNK and DT_REG
1432                  */
1433                 return DT_REG;
1434         }
1435
1436         /* Try to look it up as a directory */
1437         pos = cache_name_pos(path, len);
1438         if (pos >= 0)
1439                 return DT_UNKNOWN;
1440         pos = -pos-1;
1441         while (pos < active_nr) {
1442                 ce = active_cache[pos++];
1443                 if (strncmp(ce->name, path, len))
1444                         break;
1445                 if (ce->name[len] > '/')
1446                         break;
1447                 if (ce->name[len] < '/')
1448                         continue;
1449                 if (!ce_uptodate(ce))
1450                         break;  /* continue? */
1451                 return DT_DIR;
1452         }
1453         return DT_UNKNOWN;
1454 }
1455
1456 static int get_dtype(struct dirent *de, const char *path, int len)
1457 {
1458         int dtype = de ? DTYPE(de) : DT_UNKNOWN;
1459         struct stat st;
1460
1461         if (dtype != DT_UNKNOWN)
1462                 return dtype;
1463         dtype = get_index_dtype(path, len);
1464         if (dtype != DT_UNKNOWN)
1465                 return dtype;
1466         if (lstat(path, &st))
1467                 return dtype;
1468         if (S_ISREG(st.st_mode))
1469                 return DT_REG;
1470         if (S_ISDIR(st.st_mode))
1471                 return DT_DIR;
1472         if (S_ISLNK(st.st_mode))
1473                 return DT_LNK;
1474         return dtype;
1475 }
1476
1477 static enum path_treatment treat_one_path(struct dir_struct *dir,
1478                                           struct untracked_cache_dir *untracked,
1479                                           struct strbuf *path,
1480                                           int baselen,
1481                                           const struct pathspec *pathspec,
1482                                           int dtype, struct dirent *de)
1483 {
1484         int exclude;
1485         int has_path_in_index = !!cache_file_exists(path->buf, path->len, ignore_case);
1486
1487         if (dtype == DT_UNKNOWN)
1488                 dtype = get_dtype(de, path->buf, path->len);
1489
1490         /* Always exclude indexed files */
1491         if (dtype != DT_DIR && has_path_in_index)
1492                 return path_none;
1493
1494         /*
1495          * When we are looking at a directory P in the working tree,
1496          * there are three cases:
1497          *
1498          * (1) P exists in the index.  Everything inside the directory P in
1499          * the working tree needs to go when P is checked out from the
1500          * index.
1501          *
1502          * (2) P does not exist in the index, but there is P/Q in the index.
1503          * We know P will stay a directory when we check out the contents
1504          * of the index, but we do not know yet if there is a directory
1505          * P/Q in the working tree to be killed, so we need to recurse.
1506          *
1507          * (3) P does not exist in the index, and there is no P/Q in the index
1508          * to require P to be a directory, either.  Only in this case, we
1509          * know that everything inside P will not be killed without
1510          * recursing.
1511          */
1512         if ((dir->flags & DIR_COLLECT_KILLED_ONLY) &&
1513             (dtype == DT_DIR) &&
1514             !has_path_in_index &&
1515             (directory_exists_in_index(path->buf, path->len) == index_nonexistent))
1516                 return path_none;
1517
1518         exclude = is_excluded(dir, path->buf, &dtype);
1519
1520         /*
1521          * Excluded? If we don't explicitly want to show
1522          * ignored files, ignore it
1523          */
1524         if (exclude && !(dir->flags & (DIR_SHOW_IGNORED|DIR_SHOW_IGNORED_TOO)))
1525                 return path_excluded;
1526
1527         switch (dtype) {
1528         default:
1529                 return path_none;
1530         case DT_DIR:
1531                 strbuf_addch(path, '/');
1532                 return treat_directory(dir, untracked, path->buf, path->len,
1533                                        baselen, exclude, pathspec);
1534         case DT_REG:
1535         case DT_LNK:
1536                 return exclude ? path_excluded : path_untracked;
1537         }
1538 }
1539
1540 static enum path_treatment treat_path_fast(struct dir_struct *dir,
1541                                            struct untracked_cache_dir *untracked,
1542                                            struct cached_dir *cdir,
1543                                            struct strbuf *path,
1544                                            int baselen,
1545                                            const struct pathspec *pathspec)
1546 {
1547         strbuf_setlen(path, baselen);
1548         if (!cdir->ucd) {
1549                 strbuf_addstr(path, cdir->file);
1550                 return path_untracked;
1551         }
1552         strbuf_addstr(path, cdir->ucd->name);
1553         /* treat_one_path() does this before it calls treat_directory() */
1554         strbuf_complete(path, '/');
1555         if (cdir->ucd->check_only)
1556                 /*
1557                  * check_only is set as a result of treat_directory() getting
1558                  * to its bottom. Verify again the same set of directories
1559                  * with check_only set.
1560                  */
1561                 return read_directory_recursive(dir, path->buf, path->len,
1562                                                 cdir->ucd, 1, pathspec);
1563         /*
1564          * We get path_recurse in the first run when
1565          * directory_exists_in_index() returns index_nonexistent. We
1566          * are sure that new changes in the index does not impact the
1567          * outcome. Return now.
1568          */
1569         return path_recurse;
1570 }
1571
1572 static enum path_treatment treat_path(struct dir_struct *dir,
1573                                       struct untracked_cache_dir *untracked,
1574                                       struct cached_dir *cdir,
1575                                       struct strbuf *path,
1576                                       int baselen,
1577                                       const struct pathspec *pathspec)
1578 {
1579         int dtype;
1580         struct dirent *de = cdir->de;
1581
1582         if (!de)
1583                 return treat_path_fast(dir, untracked, cdir, path,
1584                                        baselen, pathspec);
1585         if (is_dot_or_dotdot(de->d_name) || !strcmp(de->d_name, ".git"))
1586                 return path_none;
1587         strbuf_setlen(path, baselen);
1588         strbuf_addstr(path, de->d_name);
1589         if (simplify_away(path->buf, path->len, pathspec))
1590                 return path_none;
1591
1592         dtype = DTYPE(de);
1593         return treat_one_path(dir, untracked, path, baselen, pathspec, dtype, de);
1594 }
1595
1596 static void add_untracked(struct untracked_cache_dir *dir, const char *name)
1597 {
1598         if (!dir)
1599                 return;
1600         ALLOC_GROW(dir->untracked, dir->untracked_nr + 1,
1601                    dir->untracked_alloc);
1602         dir->untracked[dir->untracked_nr++] = xstrdup(name);
1603 }
1604
1605 static int valid_cached_dir(struct dir_struct *dir,
1606                             struct untracked_cache_dir *untracked,
1607                             struct strbuf *path,
1608                             int check_only)
1609 {
1610         struct stat st;
1611
1612         if (!untracked)
1613                 return 0;
1614
1615         if (stat(path->len ? path->buf : ".", &st)) {
1616                 invalidate_directory(dir->untracked, untracked);
1617                 memset(&untracked->stat_data, 0, sizeof(untracked->stat_data));
1618                 return 0;
1619         }
1620         if (!untracked->valid ||
1621             match_stat_data_racy(&the_index, &untracked->stat_data, &st)) {
1622                 if (untracked->valid)
1623                         invalidate_directory(dir->untracked, untracked);
1624                 fill_stat_data(&untracked->stat_data, &st);
1625                 return 0;
1626         }
1627
1628         if (untracked->check_only != !!check_only) {
1629                 invalidate_directory(dir->untracked, untracked);
1630                 return 0;
1631         }
1632
1633         /*
1634          * prep_exclude will be called eventually on this directory,
1635          * but it's called much later in last_exclude_matching(). We
1636          * need it now to determine the validity of the cache for this
1637          * path. The next calls will be nearly no-op, the way
1638          * prep_exclude() is designed.
1639          */
1640         if (path->len && path->buf[path->len - 1] != '/') {
1641                 strbuf_addch(path, '/');
1642                 prep_exclude(dir, path->buf, path->len);
1643                 strbuf_setlen(path, path->len - 1);
1644         } else
1645                 prep_exclude(dir, path->buf, path->len);
1646
1647         /* hopefully prep_exclude() haven't invalidated this entry... */
1648         return untracked->valid;
1649 }
1650
1651 static int open_cached_dir(struct cached_dir *cdir,
1652                            struct dir_struct *dir,
1653                            struct untracked_cache_dir *untracked,
1654                            struct strbuf *path,
1655                            int check_only)
1656 {
1657         memset(cdir, 0, sizeof(*cdir));
1658         cdir->untracked = untracked;
1659         if (valid_cached_dir(dir, untracked, path, check_only))
1660                 return 0;
1661         cdir->fdir = opendir(path->len ? path->buf : ".");
1662         if (dir->untracked)
1663                 dir->untracked->dir_opened++;
1664         if (!cdir->fdir)
1665                 return -1;
1666         return 0;
1667 }
1668
1669 static int read_cached_dir(struct cached_dir *cdir)
1670 {
1671         if (cdir->fdir) {
1672                 cdir->de = readdir(cdir->fdir);
1673                 if (!cdir->de)
1674                         return -1;
1675                 return 0;
1676         }
1677         while (cdir->nr_dirs < cdir->untracked->dirs_nr) {
1678                 struct untracked_cache_dir *d = cdir->untracked->dirs[cdir->nr_dirs];
1679                 if (!d->recurse) {
1680                         cdir->nr_dirs++;
1681                         continue;
1682                 }
1683                 cdir->ucd = d;
1684                 cdir->nr_dirs++;
1685                 return 0;
1686         }
1687         cdir->ucd = NULL;
1688         if (cdir->nr_files < cdir->untracked->untracked_nr) {
1689                 struct untracked_cache_dir *d = cdir->untracked;
1690                 cdir->file = d->untracked[cdir->nr_files++];
1691                 return 0;
1692         }
1693         return -1;
1694 }
1695
1696 static void close_cached_dir(struct cached_dir *cdir)
1697 {
1698         if (cdir->fdir)
1699                 closedir(cdir->fdir);
1700         /*
1701          * We have gone through this directory and found no untracked
1702          * entries. Mark it valid.
1703          */
1704         if (cdir->untracked) {
1705                 cdir->untracked->valid = 1;
1706                 cdir->untracked->recurse = 1;
1707         }
1708 }
1709
1710 /*
1711  * Read a directory tree. We currently ignore anything but
1712  * directories, regular files and symlinks. That's because git
1713  * doesn't handle them at all yet. Maybe that will change some
1714  * day.
1715  *
1716  * Also, we ignore the name ".git" (even if it is not a directory).
1717  * That likely will not change.
1718  *
1719  * Returns the most significant path_treatment value encountered in the scan.
1720  */
1721 static enum path_treatment read_directory_recursive(struct dir_struct *dir,
1722                                     const char *base, int baselen,
1723                                     struct untracked_cache_dir *untracked, int check_only,
1724                                     const struct pathspec *pathspec)
1725 {
1726         struct cached_dir cdir;
1727         enum path_treatment state, subdir_state, dir_state = path_none;
1728         struct strbuf path = STRBUF_INIT;
1729
1730         strbuf_add(&path, base, baselen);
1731
1732         if (open_cached_dir(&cdir, dir, untracked, &path, check_only))
1733                 goto out;
1734
1735         if (untracked)
1736                 untracked->check_only = !!check_only;
1737
1738         while (!read_cached_dir(&cdir)) {
1739                 /* check how the file or directory should be treated */
1740                 state = treat_path(dir, untracked, &cdir, &path,
1741                                    baselen, pathspec);
1742
1743                 if (state > dir_state)
1744                         dir_state = state;
1745
1746                 /* recurse into subdir if instructed by treat_path */
1747                 if (state == path_recurse) {
1748                         struct untracked_cache_dir *ud;
1749                         ud = lookup_untracked(dir->untracked, untracked,
1750                                               path.buf + baselen,
1751                                               path.len - baselen);
1752                         subdir_state =
1753                                 read_directory_recursive(dir, path.buf,
1754                                                          path.len, ud,
1755                                                          check_only, pathspec);
1756                         if (subdir_state > dir_state)
1757                                 dir_state = subdir_state;
1758                 }
1759
1760                 if (check_only) {
1761                         /* abort early if maximum state has been reached */
1762                         if (dir_state == path_untracked) {
1763                                 if (cdir.fdir)
1764                                         add_untracked(untracked, path.buf + baselen);
1765                                 break;
1766                         }
1767                         /* skip the dir_add_* part */
1768                         continue;
1769                 }
1770
1771                 /* add the path to the appropriate result list */
1772                 switch (state) {
1773                 case path_excluded:
1774                         if (dir->flags & DIR_SHOW_IGNORED)
1775                                 dir_add_name(dir, path.buf, path.len);
1776                         else if ((dir->flags & DIR_SHOW_IGNORED_TOO) ||
1777                                 ((dir->flags & DIR_COLLECT_IGNORED) &&
1778                                 exclude_matches_pathspec(path.buf, path.len,
1779                                                          pathspec)))
1780                                 dir_add_ignored(dir, path.buf, path.len);
1781                         break;
1782
1783                 case path_untracked:
1784                         if (dir->flags & DIR_SHOW_IGNORED)
1785                                 break;
1786                         dir_add_name(dir, path.buf, path.len);
1787                         if (cdir.fdir)
1788                                 add_untracked(untracked, path.buf + baselen);
1789                         break;
1790
1791                 default:
1792                         break;
1793                 }
1794         }
1795         close_cached_dir(&cdir);
1796  out:
1797         strbuf_release(&path);
1798
1799         return dir_state;
1800 }
1801
1802 static int cmp_name(const void *p1, const void *p2)
1803 {
1804         const struct dir_entry *e1 = *(const struct dir_entry **)p1;
1805         const struct dir_entry *e2 = *(const struct dir_entry **)p2;
1806
1807         return name_compare(e1->name, e1->len, e2->name, e2->len);
1808 }
1809
1810 static int treat_leading_path(struct dir_struct *dir,
1811                               const char *path, int len,
1812                               const struct pathspec *pathspec)
1813 {
1814         struct strbuf sb = STRBUF_INIT;
1815         int baselen, rc = 0;
1816         const char *cp;
1817         int old_flags = dir->flags;
1818
1819         while (len && path[len - 1] == '/')
1820                 len--;
1821         if (!len)
1822                 return 1;
1823         baselen = 0;
1824         dir->flags &= ~DIR_SHOW_OTHER_DIRECTORIES;
1825         while (1) {
1826                 cp = path + baselen + !!baselen;
1827                 cp = memchr(cp, '/', path + len - cp);
1828                 if (!cp)
1829                         baselen = len;
1830                 else
1831                         baselen = cp - path;
1832                 strbuf_setlen(&sb, 0);
1833                 strbuf_add(&sb, path, baselen);
1834                 if (!is_directory(sb.buf))
1835                         break;
1836                 if (simplify_away(sb.buf, sb.len, pathspec))
1837                         break;
1838                 if (treat_one_path(dir, NULL, &sb, baselen, pathspec,
1839                                    DT_DIR, NULL) == path_none)
1840                         break; /* do not recurse into it */
1841                 if (len <= baselen) {
1842                         rc = 1;
1843                         break; /* finished checking */
1844                 }
1845         }
1846         strbuf_release(&sb);
1847         dir->flags = old_flags;
1848         return rc;
1849 }
1850
1851 static const char *get_ident_string(void)
1852 {
1853         static struct strbuf sb = STRBUF_INIT;
1854         struct utsname uts;
1855
1856         if (sb.len)
1857                 return sb.buf;
1858         if (uname(&uts) < 0)
1859                 die_errno(_("failed to get kernel name and information"));
1860         strbuf_addf(&sb, "Location %s, system %s", get_git_work_tree(),
1861                     uts.sysname);
1862         return sb.buf;
1863 }
1864
1865 static int ident_in_untracked(const struct untracked_cache *uc)
1866 {
1867         /*
1868          * Previous git versions may have saved many NUL separated
1869          * strings in the "ident" field, but it is insane to manage
1870          * many locations, so just take care of the first one.
1871          */
1872
1873         return !strcmp(uc->ident.buf, get_ident_string());
1874 }
1875
1876 static void set_untracked_ident(struct untracked_cache *uc)
1877 {
1878         strbuf_reset(&uc->ident);
1879         strbuf_addstr(&uc->ident, get_ident_string());
1880
1881         /*
1882          * This strbuf used to contain a list of NUL separated
1883          * strings, so save NUL too for backward compatibility.
1884          */
1885         strbuf_addch(&uc->ident, 0);
1886 }
1887
1888 static void new_untracked_cache(struct index_state *istate)
1889 {
1890         struct untracked_cache *uc = xcalloc(1, sizeof(*uc));
1891         strbuf_init(&uc->ident, 100);
1892         uc->exclude_per_dir = ".gitignore";
1893         /* should be the same flags used by git-status */
1894         uc->dir_flags = DIR_SHOW_OTHER_DIRECTORIES | DIR_HIDE_EMPTY_DIRECTORIES;
1895         set_untracked_ident(uc);
1896         istate->untracked = uc;
1897         istate->cache_changed |= UNTRACKED_CHANGED;
1898 }
1899
1900 void add_untracked_cache(struct index_state *istate)
1901 {
1902         if (!istate->untracked) {
1903                 new_untracked_cache(istate);
1904         } else {
1905                 if (!ident_in_untracked(istate->untracked)) {
1906                         free_untracked_cache(istate->untracked);
1907                         new_untracked_cache(istate);
1908                 }
1909         }
1910 }
1911
1912 void remove_untracked_cache(struct index_state *istate)
1913 {
1914         if (istate->untracked) {
1915                 free_untracked_cache(istate->untracked);
1916                 istate->untracked = NULL;
1917                 istate->cache_changed |= UNTRACKED_CHANGED;
1918         }
1919 }
1920
1921 static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *dir,
1922                                                       int base_len,
1923                                                       const struct pathspec *pathspec)
1924 {
1925         struct untracked_cache_dir *root;
1926
1927         if (!dir->untracked || getenv("GIT_DISABLE_UNTRACKED_CACHE"))
1928                 return NULL;
1929
1930         /*
1931          * We only support $GIT_DIR/info/exclude and core.excludesfile
1932          * as the global ignore rule files. Any other additions
1933          * (e.g. from command line) invalidate the cache. This
1934          * condition also catches running setup_standard_excludes()
1935          * before setting dir->untracked!
1936          */
1937         if (dir->unmanaged_exclude_files)
1938                 return NULL;
1939
1940         /*
1941          * Optimize for the main use case only: whole-tree git
1942          * status. More work involved in treat_leading_path() if we
1943          * use cache on just a subset of the worktree. pathspec
1944          * support could make the matter even worse.
1945          */
1946         if (base_len || (pathspec && pathspec->nr))
1947                 return NULL;
1948
1949         /* Different set of flags may produce different results */
1950         if (dir->flags != dir->untracked->dir_flags ||
1951             /*
1952              * See treat_directory(), case index_nonexistent. Without
1953              * this flag, we may need to also cache .git file content
1954              * for the resolve_gitlink_ref() call, which we don't.
1955              */
1956             !(dir->flags & DIR_SHOW_OTHER_DIRECTORIES) ||
1957             /* We don't support collecting ignore files */
1958             (dir->flags & (DIR_SHOW_IGNORED | DIR_SHOW_IGNORED_TOO |
1959                            DIR_COLLECT_IGNORED)))
1960                 return NULL;
1961
1962         /*
1963          * If we use .gitignore in the cache and now you change it to
1964          * .gitexclude, everything will go wrong.
1965          */
1966         if (dir->exclude_per_dir != dir->untracked->exclude_per_dir &&
1967             strcmp(dir->exclude_per_dir, dir->untracked->exclude_per_dir))
1968                 return NULL;
1969
1970         /*
1971          * EXC_CMDL is not considered in the cache. If people set it,
1972          * skip the cache.
1973          */
1974         if (dir->exclude_list_group[EXC_CMDL].nr)
1975                 return NULL;
1976
1977         if (!ident_in_untracked(dir->untracked)) {
1978                 warning(_("Untracked cache is disabled on this system or location."));
1979                 return NULL;
1980         }
1981
1982         if (!dir->untracked->root) {
1983                 const int len = sizeof(*dir->untracked->root);
1984                 dir->untracked->root = xmalloc(len);
1985                 memset(dir->untracked->root, 0, len);
1986         }
1987
1988         /* Validate $GIT_DIR/info/exclude and core.excludesfile */
1989         root = dir->untracked->root;
1990         if (hashcmp(dir->ss_info_exclude.sha1,
1991                     dir->untracked->ss_info_exclude.sha1)) {
1992                 invalidate_gitignore(dir->untracked, root);
1993                 dir->untracked->ss_info_exclude = dir->ss_info_exclude;
1994         }
1995         if (hashcmp(dir->ss_excludes_file.sha1,
1996                     dir->untracked->ss_excludes_file.sha1)) {
1997                 invalidate_gitignore(dir->untracked, root);
1998                 dir->untracked->ss_excludes_file = dir->ss_excludes_file;
1999         }
2000
2001         /* Make sure this directory is not dropped out at saving phase */
2002         root->recurse = 1;
2003         return root;
2004 }
2005
2006 int read_directory(struct dir_struct *dir, const char *path,
2007                    int len, const struct pathspec *pathspec)
2008 {
2009         struct untracked_cache_dir *untracked;
2010
2011         if (has_symlink_leading_path(path, len))
2012                 return dir->nr;
2013
2014         untracked = validate_untracked_cache(dir, len, pathspec);
2015         if (!untracked)
2016                 /*
2017                  * make sure untracked cache code path is disabled,
2018                  * e.g. prep_exclude()
2019                  */
2020                 dir->untracked = NULL;
2021         if (!len || treat_leading_path(dir, path, len, pathspec))
2022                 read_directory_recursive(dir, path, len, untracked, 0, pathspec);
2023         QSORT(dir->entries, dir->nr, cmp_name);
2024         QSORT(dir->ignored, dir->ignored_nr, cmp_name);
2025         if (dir->untracked) {
2026                 static struct trace_key trace_untracked_stats = TRACE_KEY_INIT(UNTRACKED_STATS);
2027                 trace_printf_key(&trace_untracked_stats,
2028                                  "node creation: %u\n"
2029                                  "gitignore invalidation: %u\n"
2030                                  "directory invalidation: %u\n"
2031                                  "opendir: %u\n",
2032                                  dir->untracked->dir_created,
2033                                  dir->untracked->gitignore_invalidated,
2034                                  dir->untracked->dir_invalidated,
2035                                  dir->untracked->dir_opened);
2036                 if (dir->untracked == the_index.untracked &&
2037                     (dir->untracked->dir_opened ||
2038                      dir->untracked->gitignore_invalidated ||
2039                      dir->untracked->dir_invalidated))
2040                         the_index.cache_changed |= UNTRACKED_CHANGED;
2041                 if (dir->untracked != the_index.untracked) {
2042                         free(dir->untracked);
2043                         dir->untracked = NULL;
2044                 }
2045         }
2046         return dir->nr;
2047 }
2048
2049 int file_exists(const char *f)
2050 {
2051         struct stat sb;
2052         return lstat(f, &sb) == 0;
2053 }
2054
2055 static int cmp_icase(char a, char b)
2056 {
2057         if (a == b)
2058                 return 0;
2059         if (ignore_case)
2060                 return toupper(a) - toupper(b);
2061         return a - b;
2062 }
2063
2064 /*
2065  * Given two normalized paths (a trailing slash is ok), if subdir is
2066  * outside dir, return -1.  Otherwise return the offset in subdir that
2067  * can be used as relative path to dir.
2068  */
2069 int dir_inside_of(const char *subdir, const char *dir)
2070 {
2071         int offset = 0;
2072
2073         assert(dir && subdir && *dir && *subdir);
2074
2075         while (*dir && *subdir && !cmp_icase(*dir, *subdir)) {
2076                 dir++;
2077                 subdir++;
2078                 offset++;
2079         }
2080
2081         /* hel[p]/me vs hel[l]/yeah */
2082         if (*dir && *subdir)
2083                 return -1;
2084
2085         if (!*subdir)
2086                 return !*dir ? offset : -1; /* same dir */
2087
2088         /* foo/[b]ar vs foo/[] */
2089         if (is_dir_sep(dir[-1]))
2090                 return is_dir_sep(subdir[-1]) ? offset : -1;
2091
2092         /* foo[/]bar vs foo[] */
2093         return is_dir_sep(*subdir) ? offset + 1 : -1;
2094 }
2095
2096 int is_inside_dir(const char *dir)
2097 {
2098         char *cwd;
2099         int rc;
2100
2101         if (!dir)
2102                 return 0;
2103
2104         cwd = xgetcwd();
2105         rc = (dir_inside_of(cwd, dir) >= 0);
2106         free(cwd);
2107         return rc;
2108 }
2109
2110 int is_empty_dir(const char *path)
2111 {
2112         DIR *dir = opendir(path);
2113         struct dirent *e;
2114         int ret = 1;
2115
2116         if (!dir)
2117                 return 0;
2118
2119         while ((e = readdir(dir)) != NULL)
2120                 if (!is_dot_or_dotdot(e->d_name)) {
2121                         ret = 0;
2122                         break;
2123                 }
2124
2125         closedir(dir);
2126         return ret;
2127 }
2128
2129 static int remove_dir_recurse(struct strbuf *path, int flag, int *kept_up)
2130 {
2131         DIR *dir;
2132         struct dirent *e;
2133         int ret = 0, original_len = path->len, len, kept_down = 0;
2134         int only_empty = (flag & REMOVE_DIR_EMPTY_ONLY);
2135         int keep_toplevel = (flag & REMOVE_DIR_KEEP_TOPLEVEL);
2136         unsigned char submodule_head[20];
2137
2138         if ((flag & REMOVE_DIR_KEEP_NESTED_GIT) &&
2139             !resolve_gitlink_ref(path->buf, "HEAD", submodule_head)) {
2140                 /* Do not descend and nuke a nested git work tree. */
2141                 if (kept_up)
2142                         *kept_up = 1;
2143                 return 0;
2144         }
2145
2146         flag &= ~REMOVE_DIR_KEEP_TOPLEVEL;
2147         dir = opendir(path->buf);
2148         if (!dir) {
2149                 if (errno == ENOENT)
2150                         return keep_toplevel ? -1 : 0;
2151                 else if (errno == EACCES && !keep_toplevel)
2152                         /*
2153                          * An empty dir could be removable even if it
2154                          * is unreadable:
2155                          */
2156                         return rmdir(path->buf);
2157                 else
2158                         return -1;
2159         }
2160         strbuf_complete(path, '/');
2161
2162         len = path->len;
2163         while ((e = readdir(dir)) != NULL) {
2164                 struct stat st;
2165                 if (is_dot_or_dotdot(e->d_name))
2166                         continue;
2167
2168                 strbuf_setlen(path, len);
2169                 strbuf_addstr(path, e->d_name);
2170                 if (lstat(path->buf, &st)) {
2171                         if (errno == ENOENT)
2172                                 /*
2173                                  * file disappeared, which is what we
2174                                  * wanted anyway
2175                                  */
2176                                 continue;
2177                         /* fall thru */
2178                 } else if (S_ISDIR(st.st_mode)) {
2179                         if (!remove_dir_recurse(path, flag, &kept_down))
2180                                 continue; /* happy */
2181                 } else if (!only_empty &&
2182                            (!unlink(path->buf) || errno == ENOENT)) {
2183                         continue; /* happy, too */
2184                 }
2185
2186                 /* path too long, stat fails, or non-directory still exists */
2187                 ret = -1;
2188                 break;
2189         }
2190         closedir(dir);
2191
2192         strbuf_setlen(path, original_len);
2193         if (!ret && !keep_toplevel && !kept_down)
2194                 ret = (!rmdir(path->buf) || errno == ENOENT) ? 0 : -1;
2195         else if (kept_up)
2196                 /*
2197                  * report the uplevel that it is not an error that we
2198                  * did not rmdir() our directory.
2199                  */
2200                 *kept_up = !ret;
2201         return ret;
2202 }
2203
2204 int remove_dir_recursively(struct strbuf *path, int flag)
2205 {
2206         return remove_dir_recurse(path, flag, NULL);
2207 }
2208
2209 static GIT_PATH_FUNC(git_path_info_exclude, "info/exclude")
2210
2211 void setup_standard_excludes(struct dir_struct *dir)
2212 {
2213         dir->exclude_per_dir = ".gitignore";
2214
2215         /* core.excludefile defaulting to $XDG_HOME/git/ignore */
2216         if (!excludes_file)
2217                 excludes_file = xdg_config_home("ignore");
2218         if (excludes_file && !access_or_warn(excludes_file, R_OK, 0))
2219                 add_excludes_from_file_1(dir, excludes_file,
2220                                          dir->untracked ? &dir->ss_excludes_file : NULL);
2221
2222         /* per repository user preference */
2223         if (startup_info->have_repository) {
2224                 const char *path = git_path_info_exclude();
2225                 if (!access_or_warn(path, R_OK, 0))
2226                         add_excludes_from_file_1(dir, path,
2227                                                  dir->untracked ? &dir->ss_info_exclude : NULL);
2228         }
2229 }
2230
2231 int remove_path(const char *name)
2232 {
2233         char *slash;
2234
2235         if (unlink(name) && errno != ENOENT && errno != ENOTDIR)
2236                 return -1;
2237
2238         slash = strrchr(name, '/');
2239         if (slash) {
2240                 char *dirs = xstrdup(name);
2241                 slash = dirs + (slash - name);
2242                 do {
2243                         *slash = '\0';
2244                 } while (rmdir(dirs) == 0 && (slash = strrchr(dirs, '/')));
2245                 free(dirs);
2246         }
2247         return 0;
2248 }
2249
2250 /*
2251  * Frees memory within dir which was allocated for exclude lists and
2252  * the exclude_stack.  Does not free dir itself.
2253  */
2254 void clear_directory(struct dir_struct *dir)
2255 {
2256         int i, j;
2257         struct exclude_list_group *group;
2258         struct exclude_list *el;
2259         struct exclude_stack *stk;
2260
2261         for (i = EXC_CMDL; i <= EXC_FILE; i++) {
2262                 group = &dir->exclude_list_group[i];
2263                 for (j = 0; j < group->nr; j++) {
2264                         el = &group->el[j];
2265                         if (i == EXC_DIRS)
2266                                 free((char *)el->src);
2267                         clear_exclude_list(el);
2268                 }
2269                 free(group->el);
2270         }
2271
2272         stk = dir->exclude_stack;
2273         while (stk) {
2274                 struct exclude_stack *prev = stk->prev;
2275                 free(stk);
2276                 stk = prev;
2277         }
2278         strbuf_release(&dir->basebuf);
2279 }
2280
2281 struct ondisk_untracked_cache {
2282         struct stat_data info_exclude_stat;
2283         struct stat_data excludes_file_stat;
2284         uint32_t dir_flags;
2285         unsigned char info_exclude_sha1[20];
2286         unsigned char excludes_file_sha1[20];
2287         char exclude_per_dir[FLEX_ARRAY];
2288 };
2289
2290 #define ouc_size(len) (offsetof(struct ondisk_untracked_cache, exclude_per_dir) + len + 1)
2291
2292 struct write_data {
2293         int index;         /* number of written untracked_cache_dir */
2294         struct ewah_bitmap *check_only; /* from untracked_cache_dir */
2295         struct ewah_bitmap *valid;      /* from untracked_cache_dir */
2296         struct ewah_bitmap *sha1_valid; /* set if exclude_sha1 is not null */
2297         struct strbuf out;
2298         struct strbuf sb_stat;
2299         struct strbuf sb_sha1;
2300 };
2301
2302 static void stat_data_to_disk(struct stat_data *to, const struct stat_data *from)
2303 {
2304         to->sd_ctime.sec  = htonl(from->sd_ctime.sec);
2305         to->sd_ctime.nsec = htonl(from->sd_ctime.nsec);
2306         to->sd_mtime.sec  = htonl(from->sd_mtime.sec);
2307         to->sd_mtime.nsec = htonl(from->sd_mtime.nsec);
2308         to->sd_dev        = htonl(from->sd_dev);
2309         to->sd_ino        = htonl(from->sd_ino);
2310         to->sd_uid        = htonl(from->sd_uid);
2311         to->sd_gid        = htonl(from->sd_gid);
2312         to->sd_size       = htonl(from->sd_size);
2313 }
2314
2315 static void write_one_dir(struct untracked_cache_dir *untracked,
2316                           struct write_data *wd)
2317 {
2318         struct stat_data stat_data;
2319         struct strbuf *out = &wd->out;
2320         unsigned char intbuf[16];
2321         unsigned int intlen, value;
2322         int i = wd->index++;
2323
2324         /*
2325          * untracked_nr should be reset whenever valid is clear, but
2326          * for safety..
2327          */
2328         if (!untracked->valid) {
2329                 untracked->untracked_nr = 0;
2330                 untracked->check_only = 0;
2331         }
2332
2333         if (untracked->check_only)
2334                 ewah_set(wd->check_only, i);
2335         if (untracked->valid) {
2336                 ewah_set(wd->valid, i);
2337                 stat_data_to_disk(&stat_data, &untracked->stat_data);
2338                 strbuf_add(&wd->sb_stat, &stat_data, sizeof(stat_data));
2339         }
2340         if (!is_null_sha1(untracked->exclude_sha1)) {
2341                 ewah_set(wd->sha1_valid, i);
2342                 strbuf_add(&wd->sb_sha1, untracked->exclude_sha1, 20);
2343         }
2344
2345         intlen = encode_varint(untracked->untracked_nr, intbuf);
2346         strbuf_add(out, intbuf, intlen);
2347
2348         /* skip non-recurse directories */
2349         for (i = 0, value = 0; i < untracked->dirs_nr; i++)
2350                 if (untracked->dirs[i]->recurse)
2351                         value++;
2352         intlen = encode_varint(value, intbuf);
2353         strbuf_add(out, intbuf, intlen);
2354
2355         strbuf_add(out, untracked->name, strlen(untracked->name) + 1);
2356
2357         for (i = 0; i < untracked->untracked_nr; i++)
2358                 strbuf_add(out, untracked->untracked[i],
2359                            strlen(untracked->untracked[i]) + 1);
2360
2361         for (i = 0; i < untracked->dirs_nr; i++)
2362                 if (untracked->dirs[i]->recurse)
2363                         write_one_dir(untracked->dirs[i], wd);
2364 }
2365
2366 void write_untracked_extension(struct strbuf *out, struct untracked_cache *untracked)
2367 {
2368         struct ondisk_untracked_cache *ouc;
2369         struct write_data wd;
2370         unsigned char varbuf[16];
2371         int varint_len;
2372         size_t len = strlen(untracked->exclude_per_dir);
2373
2374         FLEX_ALLOC_MEM(ouc, exclude_per_dir, untracked->exclude_per_dir, len);
2375         stat_data_to_disk(&ouc->info_exclude_stat, &untracked->ss_info_exclude.stat);
2376         stat_data_to_disk(&ouc->excludes_file_stat, &untracked->ss_excludes_file.stat);
2377         hashcpy(ouc->info_exclude_sha1, untracked->ss_info_exclude.sha1);
2378         hashcpy(ouc->excludes_file_sha1, untracked->ss_excludes_file.sha1);
2379         ouc->dir_flags = htonl(untracked->dir_flags);
2380
2381         varint_len = encode_varint(untracked->ident.len, varbuf);
2382         strbuf_add(out, varbuf, varint_len);
2383         strbuf_addbuf(out, &untracked->ident);
2384
2385         strbuf_add(out, ouc, ouc_size(len));
2386         free(ouc);
2387         ouc = NULL;
2388
2389         if (!untracked->root) {
2390                 varint_len = encode_varint(0, varbuf);
2391                 strbuf_add(out, varbuf, varint_len);
2392                 return;
2393         }
2394
2395         wd.index      = 0;
2396         wd.check_only = ewah_new();
2397         wd.valid      = ewah_new();
2398         wd.sha1_valid = ewah_new();
2399         strbuf_init(&wd.out, 1024);
2400         strbuf_init(&wd.sb_stat, 1024);
2401         strbuf_init(&wd.sb_sha1, 1024);
2402         write_one_dir(untracked->root, &wd);
2403
2404         varint_len = encode_varint(wd.index, varbuf);
2405         strbuf_add(out, varbuf, varint_len);
2406         strbuf_addbuf(out, &wd.out);
2407         ewah_serialize_strbuf(wd.valid, out);
2408         ewah_serialize_strbuf(wd.check_only, out);
2409         ewah_serialize_strbuf(wd.sha1_valid, out);
2410         strbuf_addbuf(out, &wd.sb_stat);
2411         strbuf_addbuf(out, &wd.sb_sha1);
2412         strbuf_addch(out, '\0'); /* safe guard for string lists */
2413
2414         ewah_free(wd.valid);
2415         ewah_free(wd.check_only);
2416         ewah_free(wd.sha1_valid);
2417         strbuf_release(&wd.out);
2418         strbuf_release(&wd.sb_stat);
2419         strbuf_release(&wd.sb_sha1);
2420 }
2421
2422 static void free_untracked(struct untracked_cache_dir *ucd)
2423 {
2424         int i;
2425         if (!ucd)
2426                 return;
2427         for (i = 0; i < ucd->dirs_nr; i++)
2428                 free_untracked(ucd->dirs[i]);
2429         for (i = 0; i < ucd->untracked_nr; i++)
2430                 free(ucd->untracked[i]);
2431         free(ucd->untracked);
2432         free(ucd->dirs);
2433         free(ucd);
2434 }
2435
2436 void free_untracked_cache(struct untracked_cache *uc)
2437 {
2438         if (uc)
2439                 free_untracked(uc->root);
2440         free(uc);
2441 }
2442
2443 struct read_data {
2444         int index;
2445         struct untracked_cache_dir **ucd;
2446         struct ewah_bitmap *check_only;
2447         struct ewah_bitmap *valid;
2448         struct ewah_bitmap *sha1_valid;
2449         const unsigned char *data;
2450         const unsigned char *end;
2451 };
2452
2453 static void stat_data_from_disk(struct stat_data *to, const struct stat_data *from)
2454 {
2455         to->sd_ctime.sec  = get_be32(&from->sd_ctime.sec);
2456         to->sd_ctime.nsec = get_be32(&from->sd_ctime.nsec);
2457         to->sd_mtime.sec  = get_be32(&from->sd_mtime.sec);
2458         to->sd_mtime.nsec = get_be32(&from->sd_mtime.nsec);
2459         to->sd_dev        = get_be32(&from->sd_dev);
2460         to->sd_ino        = get_be32(&from->sd_ino);
2461         to->sd_uid        = get_be32(&from->sd_uid);
2462         to->sd_gid        = get_be32(&from->sd_gid);
2463         to->sd_size       = get_be32(&from->sd_size);
2464 }
2465
2466 static int read_one_dir(struct untracked_cache_dir **untracked_,
2467                         struct read_data *rd)
2468 {
2469         struct untracked_cache_dir ud, *untracked;
2470         const unsigned char *next, *data = rd->data, *end = rd->end;
2471         unsigned int value;
2472         int i, len;
2473
2474         memset(&ud, 0, sizeof(ud));
2475
2476         next = data;
2477         value = decode_varint(&next);
2478         if (next > end)
2479                 return -1;
2480         ud.recurse         = 1;
2481         ud.untracked_alloc = value;
2482         ud.untracked_nr    = value;
2483         if (ud.untracked_nr)
2484                 ALLOC_ARRAY(ud.untracked, ud.untracked_nr);
2485         data = next;
2486
2487         next = data;
2488         ud.dirs_alloc = ud.dirs_nr = decode_varint(&next);
2489         if (next > end)
2490                 return -1;
2491         ALLOC_ARRAY(ud.dirs, ud.dirs_nr);
2492         data = next;
2493
2494         len = strlen((const char *)data);
2495         next = data + len + 1;
2496         if (next > rd->end)
2497                 return -1;
2498         *untracked_ = untracked = xmalloc(st_add(sizeof(*untracked), len));
2499         memcpy(untracked, &ud, sizeof(ud));
2500         memcpy(untracked->name, data, len + 1);
2501         data = next;
2502
2503         for (i = 0; i < untracked->untracked_nr; i++) {
2504                 len = strlen((const char *)data);
2505                 next = data + len + 1;
2506                 if (next > rd->end)
2507                         return -1;
2508                 untracked->untracked[i] = xstrdup((const char*)data);
2509                 data = next;
2510         }
2511
2512         rd->ucd[rd->index++] = untracked;
2513         rd->data = data;
2514
2515         for (i = 0; i < untracked->dirs_nr; i++) {
2516                 len = read_one_dir(untracked->dirs + i, rd);
2517                 if (len < 0)
2518                         return -1;
2519         }
2520         return 0;
2521 }
2522
2523 static void set_check_only(size_t pos, void *cb)
2524 {
2525         struct read_data *rd = cb;
2526         struct untracked_cache_dir *ud = rd->ucd[pos];
2527         ud->check_only = 1;
2528 }
2529
2530 static void read_stat(size_t pos, void *cb)
2531 {
2532         struct read_data *rd = cb;
2533         struct untracked_cache_dir *ud = rd->ucd[pos];
2534         if (rd->data + sizeof(struct stat_data) > rd->end) {
2535                 rd->data = rd->end + 1;
2536                 return;
2537         }
2538         stat_data_from_disk(&ud->stat_data, (struct stat_data *)rd->data);
2539         rd->data += sizeof(struct stat_data);
2540         ud->valid = 1;
2541 }
2542
2543 static void read_sha1(size_t pos, void *cb)
2544 {
2545         struct read_data *rd = cb;
2546         struct untracked_cache_dir *ud = rd->ucd[pos];
2547         if (rd->data + 20 > rd->end) {
2548                 rd->data = rd->end + 1;
2549                 return;
2550         }
2551         hashcpy(ud->exclude_sha1, rd->data);
2552         rd->data += 20;
2553 }
2554
2555 static void load_sha1_stat(struct sha1_stat *sha1_stat,
2556                            const struct stat_data *stat,
2557                            const unsigned char *sha1)
2558 {
2559         stat_data_from_disk(&sha1_stat->stat, stat);
2560         hashcpy(sha1_stat->sha1, sha1);
2561         sha1_stat->valid = 1;
2562 }
2563
2564 struct untracked_cache *read_untracked_extension(const void *data, unsigned long sz)
2565 {
2566         const struct ondisk_untracked_cache *ouc;
2567         struct untracked_cache *uc;
2568         struct read_data rd;
2569         const unsigned char *next = data, *end = (const unsigned char *)data + sz;
2570         const char *ident;
2571         int ident_len, len;
2572
2573         if (sz <= 1 || end[-1] != '\0')
2574                 return NULL;
2575         end--;
2576
2577         ident_len = decode_varint(&next);
2578         if (next + ident_len > end)
2579                 return NULL;
2580         ident = (const char *)next;
2581         next += ident_len;
2582
2583         ouc = (const struct ondisk_untracked_cache *)next;
2584         if (next + ouc_size(0) > end)
2585                 return NULL;
2586
2587         uc = xcalloc(1, sizeof(*uc));
2588         strbuf_init(&uc->ident, ident_len);
2589         strbuf_add(&uc->ident, ident, ident_len);
2590         load_sha1_stat(&uc->ss_info_exclude, &ouc->info_exclude_stat,
2591                        ouc->info_exclude_sha1);
2592         load_sha1_stat(&uc->ss_excludes_file, &ouc->excludes_file_stat,
2593                        ouc->excludes_file_sha1);
2594         uc->dir_flags = get_be32(&ouc->dir_flags);
2595         uc->exclude_per_dir = xstrdup(ouc->exclude_per_dir);
2596         /* NUL after exclude_per_dir is covered by sizeof(*ouc) */
2597         next += ouc_size(strlen(ouc->exclude_per_dir));
2598         if (next >= end)
2599                 goto done2;
2600
2601         len = decode_varint(&next);
2602         if (next > end || len == 0)
2603                 goto done2;
2604
2605         rd.valid      = ewah_new();
2606         rd.check_only = ewah_new();
2607         rd.sha1_valid = ewah_new();
2608         rd.data       = next;
2609         rd.end        = end;
2610         rd.index      = 0;
2611         ALLOC_ARRAY(rd.ucd, len);
2612
2613         if (read_one_dir(&uc->root, &rd) || rd.index != len)
2614                 goto done;
2615
2616         next = rd.data;
2617         len = ewah_read_mmap(rd.valid, next, end - next);
2618         if (len < 0)
2619                 goto done;
2620
2621         next += len;
2622         len = ewah_read_mmap(rd.check_only, next, end - next);
2623         if (len < 0)
2624                 goto done;
2625
2626         next += len;
2627         len = ewah_read_mmap(rd.sha1_valid, next, end - next);
2628         if (len < 0)
2629                 goto done;
2630
2631         ewah_each_bit(rd.check_only, set_check_only, &rd);
2632         rd.data = next + len;
2633         ewah_each_bit(rd.valid, read_stat, &rd);
2634         ewah_each_bit(rd.sha1_valid, read_sha1, &rd);
2635         next = rd.data;
2636
2637 done:
2638         free(rd.ucd);
2639         ewah_free(rd.valid);
2640         ewah_free(rd.check_only);
2641         ewah_free(rd.sha1_valid);
2642 done2:
2643         if (next != end) {
2644                 free_untracked_cache(uc);
2645                 uc = NULL;
2646         }
2647         return uc;
2648 }
2649
2650 static void invalidate_one_directory(struct untracked_cache *uc,
2651                                      struct untracked_cache_dir *ucd)
2652 {
2653         uc->dir_invalidated++;
2654         ucd->valid = 0;
2655         ucd->untracked_nr = 0;
2656 }
2657
2658 /*
2659  * Normally when an entry is added or removed from a directory,
2660  * invalidating that directory is enough. No need to touch its
2661  * ancestors. When a directory is shown as "foo/bar/" in git-status
2662  * however, deleting or adding an entry may have cascading effect.
2663  *
2664  * Say the "foo/bar/file" has become untracked, we need to tell the
2665  * untracked_cache_dir of "foo" that "bar/" is not an untracked
2666  * directory any more (because "bar" is managed by foo as an untracked
2667  * "file").
2668  *
2669  * Similarly, if "foo/bar/file" moves from untracked to tracked and it
2670  * was the last untracked entry in the entire "foo", we should show
2671  * "foo/" instead. Which means we have to invalidate past "bar" up to
2672  * "foo".
2673  *
2674  * This function traverses all directories from root to leaf. If there
2675  * is a chance of one of the above cases happening, we invalidate back
2676  * to root. Otherwise we just invalidate the leaf. There may be a more
2677  * sophisticated way than checking for SHOW_OTHER_DIRECTORIES to
2678  * detect these cases and avoid unnecessary invalidation, for example,
2679  * checking for the untracked entry named "bar/" in "foo", but for now
2680  * stick to something safe and simple.
2681  */
2682 static int invalidate_one_component(struct untracked_cache *uc,
2683                                     struct untracked_cache_dir *dir,
2684                                     const char *path, int len)
2685 {
2686         const char *rest = strchr(path, '/');
2687
2688         if (rest) {
2689                 int component_len = rest - path;
2690                 struct untracked_cache_dir *d =
2691                         lookup_untracked(uc, dir, path, component_len);
2692                 int ret =
2693                         invalidate_one_component(uc, d, rest + 1,
2694                                                  len - (component_len + 1));
2695                 if (ret)
2696                         invalidate_one_directory(uc, dir);
2697                 return ret;
2698         }
2699
2700         invalidate_one_directory(uc, dir);
2701         return uc->dir_flags & DIR_SHOW_OTHER_DIRECTORIES;
2702 }
2703
2704 void untracked_cache_invalidate_path(struct index_state *istate,
2705                                      const char *path)
2706 {
2707         if (!istate->untracked || !istate->untracked->root)
2708                 return;
2709         invalidate_one_component(istate->untracked, istate->untracked->root,
2710                                  path, strlen(path));
2711 }
2712
2713 void untracked_cache_remove_from_index(struct index_state *istate,
2714                                        const char *path)
2715 {
2716         untracked_cache_invalidate_path(istate, path);
2717 }
2718
2719 void untracked_cache_add_to_index(struct index_state *istate,
2720                                   const char *path)
2721 {
2722         untracked_cache_invalidate_path(istate, path);
2723 }