diff options
-rw-r--r-- | pathspec.c | 12 | ||||
-rw-r--r-- | pathspec.h | 2 | ||||
-rw-r--r-- | preload-index.c | 4 |
3 files changed, 18 insertions, 0 deletions
diff --git a/pathspec.c b/pathspec.c index 08e6c523e7..a32e379e6f 100644 --- a/pathspec.c +++ b/pathspec.c @@ -251,6 +251,18 @@ static void eat_long_magic(struct pathspec_item *item, const char *elt, *copyfrom_ = copyfrom; } +int pathspec_is_non_threadable(const struct pathspec *pathspec) +{ + int i; + + for (i = 0; i < pathspec->nr; i++) { + const struct pathspec_item *item = &pathspec->items[i]; + if (item->attr_check) + return 1; + } + return 0; +} + /* * Take an element of a pathspec and check for magic signatures. * Append the result to the prefix. Return the magic bitmap. diff --git a/pathspec.h b/pathspec.h index 5308137485..07d21f01b6 100644 --- a/pathspec.h +++ b/pathspec.h @@ -115,4 +115,6 @@ extern void add_pathspec_matches_against_index(const struct pathspec *pathspec, extern const char *check_path_for_gitlink(const char *path); extern void die_if_path_beyond_symlink(const char *path, const char *prefix); +extern int pathspec_is_non_threadable(const struct pathspec *); + #endif /* PATHSPEC_H */ diff --git a/preload-index.c b/preload-index.c index c1fe3a3ef9..af468789f5 100644 --- a/preload-index.c +++ b/preload-index.c @@ -76,6 +76,10 @@ static void preload_index(struct index_state *index, if (!core_preload_index) return; + /* Do not preload when pathspec uses non-threadable subsystems */ + if (pathspec && pathspec_is_non_threadable(pathspec)) + return; /* for now ... */ + threads = index->cache_nr / THREAD_COST; if (threads < 2) return; |