static void invalidate_directory(struct untracked_cache *uc,
struct untracked_cache_dir *dir)
{
+ int i;
uc->dir_invalidated++;
dir->valid = 0;
dir->untracked_nr = 0;
+ for (i = 0; i < dir->dirs_nr; i++)
+ dir->dirs[i]->recurse = 0;
}
/*
}
while (cdir->nr_dirs < cdir->untracked->dirs_nr) {
struct untracked_cache_dir *d = cdir->untracked->dirs[cdir->nr_dirs];
+ if (!d->recurse) {
+ cdir->nr_dirs++;
+ continue;
+ }
cdir->ucd = d;
cdir->nr_dirs++;
return 0;
* We have gone through this directory and found no untracked
* entries. Mark it valid.
*/
- if (cdir->untracked)
+ if (cdir->untracked) {
cdir->untracked->valid = 1;
+ cdir->untracked->recurse = 1;
+ }
}
/*
invalidate_gitignore(dir->untracked, root);
dir->untracked->ss_excludes_file = dir->ss_excludes_file;
}
+
+ /* Make sure this directory is not dropped out at saving phase */
+ root->recurse = 1;
return root;
}
unsigned int untracked_alloc, dirs_nr, dirs_alloc;
unsigned int untracked_nr;
unsigned int check_only : 1;
- /* all data in this struct are good */
+ /* all data except 'dirs' in this struct are good */
unsigned int valid : 1;
+ unsigned int recurse : 1;
/* null SHA-1 means this directory does not have .gitignore */
unsigned char exclude_sha1[20];
char name[FLEX_ARRAY];