mirror of
https://github.com/git/git.git
synced 2025-03-15 10:31:28 +00:00
dir_struct: add collect_ignored option
When set, this option will cause read_directory to keep track of which entries were ignored. While this shouldn't effect functionality in most cases, it can make warning messages to the user much more useful. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
90ac368afd
commit
2abd31b078
12
dir.c
12
dir.c
@ -291,6 +291,15 @@ struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int
|
|||||||
return dir->entries[dir->nr++] = dir_entry_new(pathname, len);
|
return dir->entries[dir->nr++] = dir_entry_new(pathname, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len)
|
||||||
|
{
|
||||||
|
if (cache_name_pos(pathname, len) >= 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ALLOC_GROW(dir->ignored, dir->ignored_nr, dir->ignored_alloc);
|
||||||
|
return dir->ignored[dir->ignored_nr++] = dir_entry_new(pathname, len);
|
||||||
|
}
|
||||||
|
|
||||||
enum exist_status {
|
enum exist_status {
|
||||||
index_nonexistent = 0,
|
index_nonexistent = 0,
|
||||||
index_directory,
|
index_directory,
|
||||||
@ -463,6 +472,8 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
exclude = excluded(dir, fullname);
|
exclude = excluded(dir, fullname);
|
||||||
|
if (exclude && dir->collect_ignored)
|
||||||
|
dir_add_ignored(dir, fullname, baselen + len);
|
||||||
if (exclude != dir->show_ignored) {
|
if (exclude != dir->show_ignored) {
|
||||||
if (!dir->show_ignored || DTYPE(de) != DT_DIR) {
|
if (!dir->show_ignored || DTYPE(de) != DT_DIR) {
|
||||||
continue;
|
continue;
|
||||||
@ -609,6 +620,7 @@ int read_directory(struct dir_struct *dir, const char *path, const char *base, i
|
|||||||
read_directory_recursive(dir, path, base, baselen, 0, simplify);
|
read_directory_recursive(dir, path, base, baselen, 0, simplify);
|
||||||
free_simplify(simplify);
|
free_simplify(simplify);
|
||||||
qsort(dir->entries, dir->nr, sizeof(struct dir_entry *), cmp_name);
|
qsort(dir->entries, dir->nr, sizeof(struct dir_entry *), cmp_name);
|
||||||
|
qsort(dir->ignored, dir->ignored_nr, sizeof(struct dir_entry *), cmp_name);
|
||||||
return dir->nr;
|
return dir->nr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
5
dir.h
5
dir.h
@ -31,11 +31,14 @@ struct exclude_list {
|
|||||||
|
|
||||||
struct dir_struct {
|
struct dir_struct {
|
||||||
int nr, alloc;
|
int nr, alloc;
|
||||||
|
int ignored_nr, ignored_alloc;
|
||||||
unsigned int show_ignored:1,
|
unsigned int show_ignored:1,
|
||||||
show_other_directories:1,
|
show_other_directories:1,
|
||||||
hide_empty_directories:1,
|
hide_empty_directories:1,
|
||||||
no_gitlinks:1;
|
no_gitlinks:1,
|
||||||
|
collect_ignored:1;
|
||||||
struct dir_entry **entries;
|
struct dir_entry **entries;
|
||||||
|
struct dir_entry **ignored;
|
||||||
|
|
||||||
/* Exclude info */
|
/* Exclude info */
|
||||||
const char *exclude_per_dir;
|
const char *exclude_per_dir;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user