From: Brandon Williams <bmwill@google.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, Brandon Williams <bmwill@google.com>
Subject: [PATCH 06/17] tree: convert read_tree to take an index parameter
Date: Mon, 12 Jun 2017 15:13:57 -0700 [thread overview]
Message-ID: <20170612221408.173876-7-bmwill@google.com> (raw)
In-Reply-To: <20170612221408.173876-1-bmwill@google.com>
Signed-off-by: Brandon Williams <bmwill@google.com>
---
builtin/ls-files.c | 2 +-
tree.c | 28 ++++++++++++++++++----------
tree.h | 3 ++-
3 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 0044abf66..93e46ab5f 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -460,7 +460,7 @@ void overlay_tree_on_cache(const char *tree_name, const char *prefix)
PATHSPEC_PREFER_CWD, prefix, matchbuf);
} else
memset(&pathspec, 0, sizeof(pathspec));
- if (read_tree(tree, 1, &pathspec))
+ if (read_tree(tree, 1, &pathspec, &the_index))
die("unable to read tree entries %s", tree_name);
for (i = 0; i < active_nr; i++) {
diff --git a/tree.c b/tree.c
index 603b29ee8..dd69423d9 100644
--- a/tree.c
+++ b/tree.c
@@ -1,3 +1,4 @@
+#define NO_THE_INDEX_COMPATIBILITY_MACROS
#include "cache.h"
#include "cache-tree.h"
#include "tree.h"
@@ -8,7 +9,11 @@
const char *tree_type = "tree";
-static int read_one_entry_opt(const unsigned char *sha1, const char *base, int baselen, const char *pathname, unsigned mode, int stage, int opt)
+static int read_one_entry_opt(struct index_state *istate,
+ const unsigned char *sha1,
+ const char *base, int baselen,
+ const char *pathname,
+ unsigned mode, int stage, int opt)
{
int len;
unsigned int size;
@@ -27,14 +32,15 @@ static int read_one_entry_opt(const unsigned char *sha1, const char *base, int b
memcpy(ce->name, base, baselen);
memcpy(ce->name + baselen, pathname, len+1);
hashcpy(ce->oid.hash, sha1);
- return add_cache_entry(ce, opt);
+ return add_index_entry(istate, ce, opt);
}
static int read_one_entry(const unsigned char *sha1, struct strbuf *base,
const char *pathname, unsigned mode, int stage,
void *context)
{
- return read_one_entry_opt(sha1, base->buf, base->len, pathname,
+ struct index_state *istate = context;
+ return read_one_entry_opt(istate, sha1, base->buf, base->len, pathname,
mode, stage,
ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
}
@@ -47,7 +53,8 @@ static int read_one_entry_quick(const unsigned char *sha1, struct strbuf *base,
const char *pathname, unsigned mode, int stage,
void *context)
{
- return read_one_entry_opt(sha1, base->buf, base->len, pathname,
+ struct index_state *istate = context;
+ return read_one_entry_opt(istate, sha1, base->buf, base->len, pathname,
mode, stage,
ADD_CACHE_JUST_APPEND);
}
@@ -144,7 +151,8 @@ static int cmp_cache_name_compare(const void *a_, const void *b_)
ce2->name, ce2->ce_namelen, ce_stage(ce2));
}
-int read_tree(struct tree *tree, int stage, struct pathspec *match)
+int read_tree(struct tree *tree, int stage, struct pathspec *match,
+ struct index_state *istate)
{
read_tree_fn_t fn = NULL;
int i, err;
@@ -164,23 +172,23 @@ int read_tree(struct tree *tree, int stage, struct pathspec *match)
* do it the original slow way, otherwise, append and then
* sort at the end.
*/
- for (i = 0; !fn && i < active_nr; i++) {
- const struct cache_entry *ce = active_cache[i];
+ for (i = 0; !fn && i < istate->cache_nr; i++) {
+ const struct cache_entry *ce = istate->cache[i];
if (ce_stage(ce) == stage)
fn = read_one_entry;
}
if (!fn)
fn = read_one_entry_quick;
- err = read_tree_recursive(tree, "", 0, stage, match, fn, NULL);
+ err = read_tree_recursive(tree, "", 0, stage, match, fn, istate);
if (fn == read_one_entry || err)
return err;
/*
* Sort the cache entry -- we need to nuke the cache tree, though.
*/
- cache_tree_free(&active_cache_tree);
- QSORT(active_cache, active_nr, cmp_cache_name_compare);
+ cache_tree_free(&istate->cache_tree);
+ QSORT(istate->cache, istate->cache_nr, cmp_cache_name_compare);
return 0;
}
diff --git a/tree.h b/tree.h
index 0d4734b94..744e6dc2a 100644
--- a/tree.h
+++ b/tree.h
@@ -34,6 +34,7 @@ extern int read_tree_recursive(struct tree *tree,
int stage, const struct pathspec *pathspec,
read_tree_fn_t fn, void *context);
-extern int read_tree(struct tree *tree, int stage, struct pathspec *pathspec);
+extern int read_tree(struct tree *tree, int stage, struct pathspec *pathspec,
+ struct index_state *istate);
#endif /* TREE_H */
--
2.13.1.518.g3df882009-goog
next prev parent reply other threads:[~2017-06-12 22:15 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-12 22:13 [PATCH 00/17] convert ls-files internals to pass around an index Brandon Williams
2017-06-12 22:13 ` [PATCH 01/17] convert: convert get_cached_convert_stats_ascii to take " Brandon Williams
2017-06-12 22:13 ` [PATCH 02/17] convert: convert crlf_to_git " Brandon Williams
2017-06-12 22:13 ` [PATCH 03/17] convert: convert convert_to_git_filter_fd " Brandon Williams
2017-06-12 22:13 ` [PATCH 04/17] convert: convert convert_to_git " Brandon Williams
2017-06-12 22:13 ` [PATCH 05/17] convert: convert renormalize_buffer " Brandon Williams
2017-06-12 22:13 ` Brandon Williams [this message]
2017-06-12 22:13 ` [PATCH 07/17] ls-files: convert overlay_tree_on_cache " Brandon Williams
2017-06-12 22:13 ` [PATCH 08/17] ls-files: convert write_eolinfo " Brandon Williams
2017-06-12 22:14 ` [PATCH 09/17] ls-files: convert show_killed_files " Brandon Williams
2017-06-12 22:14 ` [PATCH 10/17] ls-files: convert show_other_files " Brandon Williams
2017-06-12 22:14 ` [PATCH 11/17] ls-files: convert show_ru_info " Brandon Williams
2017-06-12 22:14 ` [PATCH 12/17] ls-files: convert ce_excluded " Brandon Williams
2017-06-12 22:14 ` [PATCH 13/17] ls-files: convert prune_cache " Brandon Williams
2017-06-12 22:14 ` [PATCH 14/17] ls-files: convert show_ce_entry " Brandon Williams
2017-06-12 22:14 ` [PATCH 15/17] ls-files: convert show_files " Brandon Williams
2017-06-12 22:14 ` [PATCH 16/17] ls-files: factor out debug info into a function Brandon Williams
2017-06-12 22:14 ` [PATCH 17/17] ls-files: factor out tag calculation Brandon Williams
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170612221408.173876-7-bmwill@google.com \
--to=bmwill@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).