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