1
0
mirror of https://github.com/git/git.git synced 2024-09-22 11:21:15 +02:00

dir: consolidate similar code in treat_directory()

Both the DIR_SKIP_NESTED_GIT and DIR_NO_GITLINKS cases were checking for
whether a path was actually a nonbare repository.  That code could be
shared, with just the result of how to act differing between the two
cases.

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-19 21:28:26 +00:00 committed by Junio C Hamano
parent 777b420347
commit c847dfafee

18
dir.c
View File

@ -1461,6 +1461,8 @@ static enum path_treatment treat_directory(struct dir_struct *dir,
const char *dirname, int len, int baselen, int exclude,
const struct pathspec *pathspec)
{
int nested_repo = 0;
/* The "len-1" is to strip the final '/' */
switch (directory_exists_in_index(istate, dirname, len-1)) {
case index_directory:
@ -1470,15 +1472,16 @@ static enum path_treatment treat_directory(struct dir_struct *dir,
return path_none;
case index_nonexistent:
if (dir->flags & DIR_SKIP_NESTED_GIT) {
int nested_repo;
if ((dir->flags & DIR_SKIP_NESTED_GIT) ||
!(dir->flags & DIR_NO_GITLINKS)) {
struct strbuf sb = STRBUF_INIT;
strbuf_addstr(&sb, dirname);
nested_repo = is_nonbare_repository_dir(&sb);
strbuf_release(&sb);
if (nested_repo)
return path_none;
}
if (nested_repo)
return ((dir->flags & DIR_SKIP_NESTED_GIT) ? path_none :
(exclude ? path_excluded : path_untracked));
if (dir->flags & DIR_SHOW_OTHER_DIRECTORIES)
break;
@ -1506,13 +1509,6 @@ static enum path_treatment treat_directory(struct dir_struct *dir,
return path_none;
}
if (!(dir->flags & DIR_NO_GITLINKS)) {
struct strbuf sb = STRBUF_INIT;
strbuf_addstr(&sb, dirname);
if (is_nonbare_repository_dir(&sb))
return exclude ? path_excluded : path_untracked;
strbuf_release(&sb);
}
return path_recurse;
}