]> git.ipfire.org Git - thirdparty/git.git/commitdiff
dir: break part of read_directory_recursive() out for reuse
authorElijah Newren <newren@gmail.com>
Tue, 10 Dec 2019 20:00:24 +0000 (20:00 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Dec 2019 20:23:24 +0000 (12:23 -0800)
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>
dir.c

diff --git a/dir.c b/dir.c
index 517a569e1042c41ded1410e37bcfa989970f9fc6..645b44ea648990b17a053ab4614441163a7d09c7 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -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
  * 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;
                }
 
-               /* 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;
-               }
+               add_path_to_appropriate_result_list(dir, untracked, &cdir,
+                                                   istate, &path, baselen,
+                                                   pathspec, state);
        }
        close_cached_dir(&cdir);
  out: