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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).