Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin-ls-files.c | 29 +---------------------------- cache.h | 2 ++ read-cache.c | 27 +++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/builtin-ls-files.c b/builtin-ls-files.c index 88e2697..0151647 100644 --- a/builtin-ls-files.c +++ b/builtin-ls-files.c @@ -206,33 +206,6 @@ static void show_files(struct dir_struct *dir, const char *prefix) } } -/* - * Prune the index to only contain stuff starting with "prefix" - */ -static void prune_cache(const char *prefix) -{ - int pos = cache_name_pos(prefix, prefix_len); - unsigned int first, last; - - if (pos < 0) - pos = -pos-1; - memmove(active_cache, active_cache + pos, - (active_nr - pos) * sizeof(struct cache_entry *)); - active_nr -= pos; - first = 0; - last = active_nr; - while (last > first) { - int next = (last + first) >> 1; - struct cache_entry *ce = active_cache[next]; - if (!strncmp(ce->name, prefix, prefix_len)) { - first = next+1; - continue; - } - last = next; - } - active_nr = last; -} - static const char *verify_pathspec(const char *prefix) { const char **p, *n, *prev; @@ -541,7 +514,7 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix) show_cached = 1; if (prefix) - prune_cache(prefix); + prune_cache(prefix, prefix_len); if (with_tree) { /* * Basic sanity check; show-stages and show-unmerged diff --git a/cache.h b/cache.h index ab1294d..54660a5 100644 --- a/cache.h +++ b/cache.h @@ -335,6 +335,7 @@ static inline void remove_name_hash(struct cache_entry *ce) #define ce_modified(ce, st, options) ie_modified(&the_index, (ce), (st), (options)) #define cache_name_exists(name, namelen, igncase) index_name_exists(&the_index, (name), (namelen), (igncase)) #define cache_name_is_other(name, namelen) index_name_is_other(&the_index, (name), (namelen)) +#define prune_cache(prefix, prefix_len) prune_index((prefix), (prefix_len), &the_index); #endif enum object_type { @@ -455,6 +456,7 @@ extern int add_file_to_index(struct index_state *, const char *path, int flags); extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, int refresh); extern int ce_same_name(struct cache_entry *a, struct cache_entry *b); extern int index_name_is_other(const struct index_state *, const char *, int); +extern void prune_index(const char *prefix, int prefix_len, struct index_state *istate); /* do stat comparison even if CE_VALID is true */ #define CE_MATCH_IGNORE_VALID 01 diff --git a/read-cache.c b/read-cache.c index 3f58711..74f889e 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1706,3 +1706,30 @@ int index_name_is_other(const struct index_state *istate, const char *name, } return 1; } + +/* + * Prune the index to only contain stuff starting with "prefix" + */ +void prune_index(const char *prefix, int prefix_len, struct index_state *istate) +{ + int pos = index_name_pos(istate, prefix, prefix_len); + unsigned int first, last; + + if (pos < 0) + pos = -pos-1; + memmove(istate->cache, istate->cache + pos, + (istate->cache_nr - pos) * sizeof(struct cache_entry *)); + istate->cache_nr -= pos; + first = 0; + last = istate->cache_nr; + while (last > first) { + int next = (last + first) >> 1; + struct cache_entry *ce = istate->cache[next]; + if (!strncmp(ce->name, prefix, prefix_len)) { + first = next+1; + continue; + } + last = next; + } + istate->cache_nr = last; +} -- 1.6.2.2.602.g83ee9f -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html