]> git.ipfire.org Git - thirdparty/git.git/commitdiff
dir: convert is_excluded to take an index
authorBrandon Williams <bmwill@google.com>
Fri, 5 May 2017 19:53:30 +0000 (12:53 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 6 May 2017 10:15:39 +0000 (19:15 +0900)
Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/add.c
builtin/check-ignore.c
builtin/clean.c
builtin/ls-files.c
dir.c
dir.h
unpack-trees.c

index bf5e676e4666d55ea0d5340cc5186f184424f2f1..0b52aeced3bc40276e11c7cc829eb5901191e8e1 100644 (file)
@@ -436,7 +436,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
                             !file_exists(path))) {
                                if (ignore_missing) {
                                        int dtype = DT_UNKNOWN;
-                                       if (is_excluded(&dir, path, &dtype))
+                                       if (is_excluded(&dir, &the_index, path, &dtype))
                                                dir_add_ignored(&dir, &the_index,
                                                                path, pathspec.items[i].len);
                                } else
index 1d73d3ca3d0509d71b927d685f3239cdab3cc885..d2293b22e1c294131e392fc17084ff4eaecdd02d 100644 (file)
@@ -101,7 +101,8 @@ static int check_ignore(struct dir_struct *dir,
                full_path = pathspec.items[i].match;
                exclude = NULL;
                if (!seen[i]) {
-                       exclude = last_exclude_matching(dir, full_path, &dtype);
+                       exclude = last_exclude_matching(dir, &the_index,
+                                                       full_path, &dtype);
                }
                if (!quiet && (exclude || show_non_matching))
                        output_exclude(pathspec.items[i].original, exclude);
index d861f836a29bf98d248f27632a8c47711a5da3a5..39866afab470e1ad5d0d70d33bdd6feadacf4c99 100644 (file)
@@ -683,7 +683,7 @@ static int filter_by_patterns_cmd(void)
                for_each_string_list_item(item, &del_list) {
                        int dtype = DT_UNKNOWN;
 
-                       if (is_excluded(&dir, item->string, &dtype)) {
+                       if (is_excluded(&dir, &the_index, item->string, &dtype)) {
                                *item->string = '\0';
                                changed++;
                        }
index a6c70dbe9ec84921108a85485a12111c854833b8..7a8c5681b655868b0c56ac765c97cf0ec57be458 100644 (file)
@@ -322,7 +322,7 @@ static void show_ru_info(void)
 static int ce_excluded(struct dir_struct *dir, const struct cache_entry *ce)
 {
        int dtype = ce_to_dtype(ce);
-       return is_excluded(dir, ce->name, &dtype);
+       return is_excluded(dir, &the_index, ce->name, &dtype);
 }
 
 static void show_files(struct dir_struct *dir)
diff --git a/dir.c b/dir.c
index 50b5e720e9bf11ff441533ba0e0999c2fe2d2bf1..a15da672c349607b13edfc9c86da2faced08d9ff 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -1204,19 +1204,20 @@ static void prep_exclude(struct dir_struct *dir,
  * undecided.
  */
 struct exclude *last_exclude_matching(struct dir_struct *dir,
-                                            const char *pathname,
-                                            int *dtype_p)
+                                     struct index_state *istate,
+                                     const char *pathname,
+                                     int *dtype_p)
 {
        int pathlen = strlen(pathname);
        const char *basename = strrchr(pathname, '/');
        basename = (basename) ? basename+1 : pathname;
 
-       prep_exclude(dir, &the_index, pathname, basename-pathname);
+       prep_exclude(dir, istate, pathname, basename-pathname);
 
        if (dir->exclude)
                return dir->exclude;
 
-       return last_exclude_matching_from_lists(dir, &the_index, pathname, pathlen,
+       return last_exclude_matching_from_lists(dir, istate, pathname, pathlen,
                        basename, dtype_p);
 }
 
@@ -1225,10 +1226,11 @@ struct exclude *last_exclude_matching(struct dir_struct *dir,
  * scans all exclude lists to determine whether pathname is excluded.
  * Returns 1 if true, otherwise 0.
  */
-int is_excluded(struct dir_struct *dir, const char *pathname, int *dtype_p)
+int is_excluded(struct dir_struct *dir, struct index_state *istate,
+               const char *pathname, int *dtype_p)
 {
        struct exclude *exclude =
-               last_exclude_matching(dir, pathname, dtype_p);
+               last_exclude_matching(dir, istate, pathname, dtype_p);
        if (exclude)
                return exclude->flags & EXC_FLAG_NEGATIVE ? 0 : 1;
        return 0;
@@ -1573,7 +1575,7 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
            (directory_exists_in_index(&the_index, path->buf, path->len) == index_nonexistent))
                return path_none;
 
-       exclude = is_excluded(dir, path->buf, &dtype);
+       exclude = is_excluded(dir, &the_index, path->buf, &dtype);
 
        /*
         * Excluded? If we don't explicitly want to show
diff --git a/dir.h b/dir.h
index 1bcda0d2342db0b8b175ecaf85166e1ce78ee319..b745f1e5d757bdc9aaa386fa011bb37359fa86ff 100644 (file)
--- a/dir.h
+++ b/dir.h
@@ -236,9 +236,12 @@ extern int match_pathname(const char *, int,
                          const char *, int, int, unsigned);
 
 extern struct exclude *last_exclude_matching(struct dir_struct *dir,
+                                            struct index_state *istate,
                                             const char *name, int *dtype);
 
-extern int is_excluded(struct dir_struct *dir, const char *name, int *dtype);
+extern int is_excluded(struct dir_struct *dir,
+                      struct index_state *istate,
+                      const char *name, int *dtype);
 
 extern struct exclude_list *add_exclude_list(struct dir_struct *dir,
                                             int group_type, const char *src);
index f278cd23f0f365f17c42d02198d46b92b0357a1f..d5b401450f1de0f7ef21d0eb307fa1bafd150f36 100644 (file)
@@ -1634,7 +1634,7 @@ static int check_ok_to_remove(const char *name, int len, int dtype,
                return 0;
 
        if (o->dir &&
-           is_excluded(o->dir, name, &dtype))
+           is_excluded(o->dir, &the_index, name, &dtype))
                /*
                 * ce->name is explicitly excluded, so it is Ok to
                 * overwrite it.