Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dir.c14
-rw-r--r--dir.h3
2 files changed, 15 insertions, 2 deletions
diff --git a/dir.c b/dir.c
index 5415374105..2d0582e8a8 100644
--- a/dir.c
+++ b/dir.c
@@ -615,9 +615,12 @@ static void invalidate_gitignore(struct untracked_cache *uc,
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;
}
/*
@@ -1578,6 +1581,10 @@ static int read_cached_dir(struct cached_dir *cdir)
}
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;
@@ -1599,8 +1606,10 @@ static void close_cached_dir(struct cached_dir *cdir)
* 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;
+ }
}
/*
@@ -1843,6 +1852,9 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d
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;
}
diff --git a/dir.h b/dir.h
index ff3d99bcb0..95baf014ca 100644
--- a/dir.h
+++ b/dir.h
@@ -115,8 +115,9 @@ struct untracked_cache_dir {
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];