dir: convert dir_add* to take an index

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Brandon Williams 2017-05-05 12:53:25 -07:00 committed by Junio C Hamano
parent 98f2a687b9
commit 9e58becab9
3 changed files with 16 additions and 9 deletions

View File

@ -437,7 +437,8 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (ignore_missing) { if (ignore_missing) {
int dtype = DT_UNKNOWN; int dtype = DT_UNKNOWN;
if (is_excluded(&dir, path, &dtype)) if (is_excluded(&dir, path, &dtype))
dir_add_ignored(&dir, path, pathspec.items[i].len); dir_add_ignored(&dir, &the_index,
path, pathspec.items[i].len);
} else } else
die(_("pathspec '%s' did not match any files"), die(_("pathspec '%s' did not match any files"),
pathspec.items[i].original); pathspec.items[i].original);

18
dir.c
View File

@ -1236,18 +1236,22 @@ static struct dir_entry *dir_entry_new(const char *pathname, int len)
return ent; return ent;
} }
static struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len) static struct dir_entry *dir_add_name(struct dir_struct *dir,
struct index_state *istate,
const char *pathname, int len)
{ {
if (index_file_exists(&the_index, pathname, len, ignore_case)) if (index_file_exists(istate, pathname, len, ignore_case))
return NULL; return NULL;
ALLOC_GROW(dir->entries, dir->nr+1, dir->alloc); ALLOC_GROW(dir->entries, dir->nr+1, dir->alloc);
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) struct dir_entry *dir_add_ignored(struct dir_struct *dir,
struct index_state *istate,
const char *pathname, int len)
{ {
if (!index_name_is_other(&the_index, pathname, len)) if (!index_name_is_other(istate, pathname, len))
return NULL; return NULL;
ALLOC_GROW(dir->ignored, dir->ignored_nr+1, dir->ignored_alloc); ALLOC_GROW(dir->ignored, dir->ignored_nr+1, dir->ignored_alloc);
@ -1819,18 +1823,18 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,
switch (state) { switch (state) {
case path_excluded: case path_excluded:
if (dir->flags & DIR_SHOW_IGNORED) if (dir->flags & DIR_SHOW_IGNORED)
dir_add_name(dir, path.buf, path.len); dir_add_name(dir, &the_index, path.buf, path.len);
else if ((dir->flags & DIR_SHOW_IGNORED_TOO) || else if ((dir->flags & DIR_SHOW_IGNORED_TOO) ||
((dir->flags & DIR_COLLECT_IGNORED) && ((dir->flags & DIR_COLLECT_IGNORED) &&
exclude_matches_pathspec(path.buf, path.len, exclude_matches_pathspec(path.buf, path.len,
pathspec))) pathspec)))
dir_add_ignored(dir, path.buf, path.len); dir_add_ignored(dir, &the_index, path.buf, path.len);
break; break;
case path_untracked: case path_untracked:
if (dir->flags & DIR_SHOW_IGNORED) if (dir->flags & DIR_SHOW_IGNORED)
break; break;
dir_add_name(dir, path.buf, path.len); dir_add_name(dir, &the_index, path.buf, path.len);
if (cdir.fdir) if (cdir.fdir)
add_untracked(untracked, path.buf + baselen); add_untracked(untracked, path.buf + baselen);
break; break;

4
dir.h
View File

@ -219,7 +219,9 @@ extern int read_directory(struct dir_struct *, const char *path, int len, const
extern int is_excluded_from_list(const char *pathname, int pathlen, const char *basename, extern int is_excluded_from_list(const char *pathname, int pathlen, const char *basename,
int *dtype, struct exclude_list *el); int *dtype, struct exclude_list *el);
struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len); struct dir_entry *dir_add_ignored(struct dir_struct *dir,
struct index_state *istate,
const char *pathname, int len);
/* /*
* these implement the matching logic for dir.c:excluded_from_list and * these implement the matching logic for dir.c:excluded_from_list and