From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 2/8] move prune_cache() to git lib
Date: Wed, 8 Apr 2009 20:05:27 +1000 [thread overview]
Message-ID: <1239185133-4181-3-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1239185133-4181-2-git-send-email-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
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
next prev parent reply other threads:[~2009-04-08 10:08 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-08 10:05 [PATCH 0/8] support "in-tree attributes" for git-archive Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 1/8] archive: add shortcuts for --format and --prefix Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` Nguyễn Thái Ngọc Duy [this message]
2009-04-08 10:05 ` [PATCH 3/8] archive: add a failure test wrt .gitattributes misreading Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 4/8] archive: add tests for directory selection Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 5/8] attr: add GIT_ATTR_INDEX "direction" Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 6/8] archive: use index instead of parsing tree directly Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 7/8] archive: disregard .gitattributes on working directory Nguyễn Thái Ngọc Duy
2009-04-08 10:05 ` [PATCH 8/8] archive: support creating archives from index Nguyễn Thái Ngọc Duy
2009-04-08 20:48 ` René Scharfe
2009-04-08 19:20 ` [PATCH 7/8] archive: disregard .gitattributes on working directory Junio C Hamano
2009-04-08 19:20 ` [PATCH 6/8] archive: use index instead of parsing tree directly Junio C Hamano
2009-04-08 20:39 ` René Scharfe
2009-04-08 21:02 ` René Scharfe
2009-04-08 19:52 ` [PATCH 4/8] archive: add tests for directory selection René Scharfe
2009-04-08 19:20 ` [PATCH 3/8] archive: add a failure test wrt .gitattributes misreading Junio C Hamano
2009-04-13 13:56 ` René Scharfe
2009-04-14 6:41 ` Nguyen Thai Ngoc Duy
2009-04-14 20:12 ` René Scharfe
2009-04-16 8:22 ` Junio C Hamano
2009-04-17 20:15 ` René Scharfe
2009-04-18 1:33 ` Junio C Hamano
2009-04-08 19:19 ` [PATCH 2/8] move prune_cache() to git lib Junio C Hamano
2009-04-08 19:51 ` [PATCH 1/8] archive: add shortcuts for --format and --prefix René Scharfe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1239185133-4181-3-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.