convert read_cache_preload() to take struct pathspec

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy
2013-07-14 15:35:49 +07:00
committed by Junio C Hamano
parent 78a951432d
commit 5ab2a2dabd
7 changed files with 19 additions and 17 deletions

View File

@ -5,7 +5,8 @@
#include "pathspec.h"
#ifdef NO_PTHREADS
static void preload_index(struct index_state *index, const char **pathspec)
static void preload_index(struct index_state *index,
const struct pathspec *pathspec)
{
; /* nothing */
}
@ -25,7 +26,7 @@ static void preload_index(struct index_state *index, const char **pathspec)
struct thread_data {
pthread_t pthread;
struct index_state *index;
const char **pathspec;
struct pathspec pathspec;
int offset, nr;
};
@ -36,9 +37,7 @@ static void *preload_thread(void *_data)
struct index_state *index = p->index;
struct cache_entry **cep = index->cache + p->offset;
struct cache_def cache;
struct pathspec pathspec;
init_pathspec(&pathspec, p->pathspec);
memset(&cache, 0, sizeof(cache));
nr = p->nr;
if (nr + p->offset > index->cache_nr)
@ -54,7 +53,7 @@ static void *preload_thread(void *_data)
continue;
if (ce_uptodate(ce))
continue;
if (!ce_path_match(ce, &pathspec))
if (!ce_path_match(ce, &p->pathspec))
continue;
if (threaded_has_symlink_leading_path(&cache, ce->name, ce_namelen(ce)))
continue;
@ -64,11 +63,11 @@ static void *preload_thread(void *_data)
continue;
ce_mark_uptodate(ce);
} while (--nr > 0);
free_pathspec(&pathspec);
return NULL;
}
static void preload_index(struct index_state *index, const char **pathspec)
static void preload_index(struct index_state *index,
const struct pathspec *pathspec)
{
int threads, i, work, offset;
struct thread_data data[MAX_PARALLEL];
@ -83,10 +82,12 @@ static void preload_index(struct index_state *index, const char **pathspec)
threads = MAX_PARALLEL;
offset = 0;
work = DIV_ROUND_UP(index->cache_nr, threads);
memset(&data, 0, sizeof(data));
for (i = 0; i < threads; i++) {
struct thread_data *p = data+i;
p->index = index;
p->pathspec = pathspec;
if (pathspec)
copy_pathspec(&p->pathspec, pathspec);
p->offset = offset;
p->nr = work;
offset += work;
@ -101,7 +102,8 @@ static void preload_index(struct index_state *index, const char **pathspec)
}
#endif
int read_index_preload(struct index_state *index, const char **pathspec)
int read_index_preload(struct index_state *index,
const struct pathspec *pathspec)
{
int retval = read_index(index);