dir: break part of read_directory_recursive() out for reuse

Create an add_path_to_appropriate_result_list() function from the code
at the end of read_directory_recursive() so we can use it elsewhere.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Elijah Newren 2019-12-10 20:00:24 +00:00 committed by Junio C Hamano
parent 072a231016
commit c5c4eddd56

60
dir.c
View File

@ -1932,6 +1932,40 @@ static void close_cached_dir(struct cached_dir *cdir)
} }
} }
static void add_path_to_appropriate_result_list(struct dir_struct *dir,
struct untracked_cache_dir *untracked,
struct cached_dir *cdir,
struct index_state *istate,
struct strbuf *path,
int baselen,
const struct pathspec *pathspec,
enum path_treatment state)
{
/* add the path to the appropriate result list */
switch (state) {
case path_excluded:
if (dir->flags & DIR_SHOW_IGNORED)
dir_add_name(dir, istate, path->buf, path->len);
else if ((dir->flags & DIR_SHOW_IGNORED_TOO) ||
((dir->flags & DIR_COLLECT_IGNORED) &&
exclude_matches_pathspec(path->buf, path->len,
pathspec)))
dir_add_ignored(dir, istate, path->buf, path->len);
break;
case path_untracked:
if (dir->flags & DIR_SHOW_IGNORED)
break;
dir_add_name(dir, istate, path->buf, path->len);
if (cdir->fdir)
add_untracked(untracked, path->buf + baselen);
break;
default:
break;
}
}
/* /*
* Read a directory tree. We currently ignore anything but * Read a directory tree. We currently ignore anything but
* directories, regular files and symlinks. That's because git * directories, regular files and symlinks. That's because git
@ -2035,29 +2069,9 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,
continue; continue;
} }
/* add the path to the appropriate result list */ add_path_to_appropriate_result_list(dir, untracked, &cdir,
switch (state) { istate, &path, baselen,
case path_excluded: pathspec, state);
if (dir->flags & DIR_SHOW_IGNORED)
dir_add_name(dir, istate, path.buf, path.len);
else if ((dir->flags & DIR_SHOW_IGNORED_TOO) ||
((dir->flags & DIR_COLLECT_IGNORED) &&
exclude_matches_pathspec(path.buf, path.len,
pathspec)))
dir_add_ignored(dir, istate, path.buf, path.len);
break;
case path_untracked:
if (dir->flags & DIR_SHOW_IGNORED)
break;
dir_add_name(dir, istate, path.buf, path.len);
if (cdir.fdir)
add_untracked(untracked, path.buf + baselen);
break;
default:
break;
}
} }
close_cached_dir(&cdir); close_cached_dir(&cdir);
out: out: