]> git.ipfire.org Git - thirdparty/git.git/commitdiff
dir: consolidate similar code in treat_directory()
authorElijah Newren <newren@gmail.com>
Thu, 19 Dec 2019 21:28:26 +0000 (21:28 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 19 Dec 2019 21:45:47 +0000 (13:45 -0800)
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>
dir.c

diff --git a/dir.c b/dir.c
index 357f9593c41e972f810888f7fcc29e8dee9e848a..e1b74f6478a2d1f2ebe21c2bf714b1fad2b18186 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -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;
        }