summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b2eabcc)
raw | patch | inline | side by side (parent: b2eabcc)
author | Miklos Vajna <vmiklos@frugalware.org> | |
Fri, 27 Jun 2008 16:21:58 +0000 (18:21 +0200) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Tue, 1 Jul 2008 05:45:51 +0000 (22:45 -0700) |
builtin-read-tree has a read_cache_unmerged() which is useful for other
builtins, for example builtin-merge uses it as well. Move it to
read-cache.c to avoid code duplication.
Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtins, for example builtin-merge uses it as well. Move it to
read-cache.c to avoid code duplication.
Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-read-tree.c | patch | blob | history | |
cache.h | patch | blob | history | |
read-cache.c | patch | blob | history |
diff --git a/builtin-read-tree.c b/builtin-read-tree.c
index 5a09e17f1ad4fe19cf4e7cc29235d14d35405168..72a6de302f88728af17ce5c5c6983c5267afc6f6 100644 (file)
--- a/builtin-read-tree.c
+++ b/builtin-read-tree.c
return 0;
}
-static int read_cache_unmerged(void)
-{
- int i;
- struct cache_entry **dst;
- struct cache_entry *last = NULL;
-
- read_cache();
- dst = active_cache;
- for (i = 0; i < active_nr; i++) {
- struct cache_entry *ce = active_cache[i];
- if (ce_stage(ce)) {
- remove_name_hash(ce);
- if (last && !strcmp(ce->name, last->name))
- continue;
- cache_tree_invalidate_path(active_cache_tree, ce->name);
- last = ce;
- continue;
- }
- *dst++ = ce;
- }
- active_nr = dst - active_cache;
- return !!last;
-}
-
static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree)
{
struct tree_desc desc;
index 6913573d1a835a7e3afc4096f186b7db08a70f0f..d0d74a3ff880b8550caf72794104fae0f81588aa 100644 (file)
--- a/cache.h
+++ b/cache.h
#define read_cache() read_index(&the_index)
#define read_cache_from(path) read_index_from(&the_index, (path))
+#define read_cache_unmerged() read_index_unmerged(&the_index)
#define write_cache(newfd, cache, entries) write_index(&the_index, (newfd))
#define discard_cache() discard_index(&the_index)
#define unmerged_cache() unmerged_index(&the_index)
/* Initialize and use the cache information */
extern int read_index(struct index_state *);
extern int read_index_from(struct index_state *, const char *path);
+extern int read_index_unmerged(struct index_state *);
extern int write_index(const struct index_state *, int newfd);
extern int discard_index(struct index_state *);
extern int unmerged_index(const struct index_state *);
diff --git a/read-cache.c b/read-cache.c
index f83de8c4158e08bab3e0445c4d15caf2d4d105aa..d801f9d1cf9eca5ddeff2f0af4549bbc1e72423f 100644 (file)
--- a/read-cache.c
+++ b/read-cache.c
}
return ce_flush(&c, newfd);
}
+
+/*
+ * Read the index file that is potentially unmerged into given
+ * index_state, dropping any unmerged entries. Returns true is
+ * the index is unmerged. Callers who want to refuse to work
+ * from an unmerged state can call this and check its return value,
+ * instead of calling read_cache().
+ */
+int read_index_unmerged(struct index_state *istate)
+{
+ int i;
+ struct cache_entry **dst;
+ struct cache_entry *last = NULL;
+
+ read_index(istate);
+ dst = istate->cache;
+ for (i = 0; i < istate->cache_nr; i++) {
+ struct cache_entry *ce = istate->cache[i];
+ if (ce_stage(ce)) {
+ remove_name_hash(ce);
+ if (last && !strcmp(ce->name, last->name))
+ continue;
+ cache_tree_invalidate_path(istate->cache_tree, ce->name);
+ last = ce;
+ continue;
+ }
+ *dst++ = ce;
+ }
+ istate->cache_nr = dst - istate->cache;
+ return !!last;
+}