Make 'unpack_trees()' take the index to work on as an argument
This is just a very mechanical conversion, and makes everybody set it to '&the_index' before calling, but at least it makes it more explicit where we work with the index. The next stage would be to split that index usage up into a 'source' and a 'destination' index, so that we can unpack into a different index than we started out from. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d1f128b050
commit
bc052d7f43
@ -152,6 +152,7 @@ static int reset_to_new(struct tree *tree, int quiet)
|
|||||||
{
|
{
|
||||||
struct unpack_trees_options opts;
|
struct unpack_trees_options opts;
|
||||||
struct tree_desc tree_desc;
|
struct tree_desc tree_desc;
|
||||||
|
|
||||||
memset(&opts, 0, sizeof(opts));
|
memset(&opts, 0, sizeof(opts));
|
||||||
opts.head_idx = -1;
|
opts.head_idx = -1;
|
||||||
opts.update = 1;
|
opts.update = 1;
|
||||||
@ -159,6 +160,7 @@ static int reset_to_new(struct tree *tree, int quiet)
|
|||||||
opts.merge = 1;
|
opts.merge = 1;
|
||||||
opts.fn = oneway_merge;
|
opts.fn = oneway_merge;
|
||||||
opts.verbose_update = !quiet;
|
opts.verbose_update = !quiet;
|
||||||
|
opts.index = &the_index;
|
||||||
parse_tree(tree);
|
parse_tree(tree);
|
||||||
init_tree_desc(&tree_desc, tree->buffer, tree->size);
|
init_tree_desc(&tree_desc, tree->buffer, tree->size);
|
||||||
if (unpack_trees(1, &tree_desc, &opts))
|
if (unpack_trees(1, &tree_desc, &opts))
|
||||||
@ -170,6 +172,7 @@ static void reset_clean_to_new(struct tree *tree, int quiet)
|
|||||||
{
|
{
|
||||||
struct unpack_trees_options opts;
|
struct unpack_trees_options opts;
|
||||||
struct tree_desc tree_desc;
|
struct tree_desc tree_desc;
|
||||||
|
|
||||||
memset(&opts, 0, sizeof(opts));
|
memset(&opts, 0, sizeof(opts));
|
||||||
opts.head_idx = -1;
|
opts.head_idx = -1;
|
||||||
opts.skip_unmerged = 1;
|
opts.skip_unmerged = 1;
|
||||||
@ -177,6 +180,7 @@ static void reset_clean_to_new(struct tree *tree, int quiet)
|
|||||||
opts.merge = 1;
|
opts.merge = 1;
|
||||||
opts.fn = oneway_merge;
|
opts.fn = oneway_merge;
|
||||||
opts.verbose_update = !quiet;
|
opts.verbose_update = !quiet;
|
||||||
|
opts.index = &the_index;
|
||||||
parse_tree(tree);
|
parse_tree(tree);
|
||||||
init_tree_desc(&tree_desc, tree->buffer, tree->size);
|
init_tree_desc(&tree_desc, tree->buffer, tree->size);
|
||||||
if (unpack_trees(1, &tree_desc, &opts))
|
if (unpack_trees(1, &tree_desc, &opts))
|
||||||
@ -224,8 +228,10 @@ static int merge_working_tree(struct checkout_opts *opts,
|
|||||||
struct tree_desc trees[2];
|
struct tree_desc trees[2];
|
||||||
struct tree *tree;
|
struct tree *tree;
|
||||||
struct unpack_trees_options topts;
|
struct unpack_trees_options topts;
|
||||||
|
|
||||||
memset(&topts, 0, sizeof(topts));
|
memset(&topts, 0, sizeof(topts));
|
||||||
topts.head_idx = -1;
|
topts.head_idx = -1;
|
||||||
|
topts.index = &the_index;
|
||||||
|
|
||||||
refresh_cache(REFRESH_QUIET);
|
refresh_cache(REFRESH_QUIET);
|
||||||
|
|
||||||
|
@ -198,6 +198,7 @@ static void create_base_index(void)
|
|||||||
opts.head_idx = 1;
|
opts.head_idx = 1;
|
||||||
opts.index_only = 1;
|
opts.index_only = 1;
|
||||||
opts.merge = 1;
|
opts.merge = 1;
|
||||||
|
opts.index = &the_index;
|
||||||
|
|
||||||
opts.fn = oneway_merge;
|
opts.fn = oneway_merge;
|
||||||
tree = parse_tree_indirect(head_sha1);
|
tree = parse_tree_indirect(head_sha1);
|
||||||
|
@ -213,6 +213,7 @@ static int git_merge_trees(int index_only,
|
|||||||
opts.merge = 1;
|
opts.merge = 1;
|
||||||
opts.head_idx = 2;
|
opts.head_idx = 2;
|
||||||
opts.fn = threeway_merge;
|
opts.fn = threeway_merge;
|
||||||
|
opts.index = &the_index;
|
||||||
|
|
||||||
init_tree_desc_from_tree(t+0, common);
|
init_tree_desc_from_tree(t+0, common);
|
||||||
init_tree_desc_from_tree(t+1, head);
|
init_tree_desc_from_tree(t+1, head);
|
||||||
|
@ -102,6 +102,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
|||||||
|
|
||||||
memset(&opts, 0, sizeof(opts));
|
memset(&opts, 0, sizeof(opts));
|
||||||
opts.head_idx = -1;
|
opts.head_idx = -1;
|
||||||
|
opts.index = &the_index;
|
||||||
|
|
||||||
git_config(git_default_config);
|
git_config(git_default_config);
|
||||||
|
|
||||||
|
@ -734,6 +734,7 @@ int run_diff_index(struct rev_info *revs, int cached)
|
|||||||
opts.merge = 1;
|
opts.merge = 1;
|
||||||
opts.fn = oneway_diff;
|
opts.fn = oneway_diff;
|
||||||
opts.unpack_data = revs;
|
opts.unpack_data = revs;
|
||||||
|
opts.index = &the_index;
|
||||||
|
|
||||||
init_tree_desc(&t, tree->buffer, tree->size);
|
init_tree_desc(&t, tree->buffer, tree->size);
|
||||||
if (unpack_trees(1, &t, &opts))
|
if (unpack_trees(1, &t, &opts))
|
||||||
@ -787,6 +788,7 @@ int do_diff_cache(const unsigned char *tree_sha1, struct diff_options *opt)
|
|||||||
opts.merge = 1;
|
opts.merge = 1;
|
||||||
opts.fn = oneway_diff;
|
opts.fn = oneway_diff;
|
||||||
opts.unpack_data = &revs;
|
opts.unpack_data = &revs;
|
||||||
|
opts.index = &the_index;
|
||||||
|
|
||||||
init_tree_desc(&t, tree->buffer, tree->size);
|
init_tree_desc(&t, tree->buffer, tree->size);
|
||||||
if (unpack_trees(1, &t, &opts))
|
if (unpack_trees(1, &t, &opts))
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#define NO_THE_INDEX_COMPATIBILITY_MACROS
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
@ -7,10 +8,10 @@
|
|||||||
#include "progress.h"
|
#include "progress.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
|
|
||||||
static inline void remove_entry(int remove)
|
static inline void remove_entry(int remove, struct unpack_trees_options *o)
|
||||||
{
|
{
|
||||||
if (remove >= 0)
|
if (remove >= 0)
|
||||||
remove_cache_entry_at(remove);
|
remove_index_entry_at(o->index, remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unlink the last component and attempt to remove leading
|
/* Unlink the last component and attempt to remove leading
|
||||||
@ -53,8 +54,8 @@ static void check_updates(struct unpack_trees_options *o)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (o->update && o->verbose_update) {
|
if (o->update && o->verbose_update) {
|
||||||
for (total = cnt = 0; cnt < active_nr; cnt++) {
|
for (total = cnt = 0; cnt < o->index->cache_nr; cnt++) {
|
||||||
struct cache_entry *ce = active_cache[cnt];
|
struct cache_entry *ce = o->index->cache[cnt];
|
||||||
if (ce->ce_flags & (CE_UPDATE | CE_REMOVE))
|
if (ce->ce_flags & (CE_UPDATE | CE_REMOVE))
|
||||||
total++;
|
total++;
|
||||||
}
|
}
|
||||||
@ -65,15 +66,15 @@ static void check_updates(struct unpack_trees_options *o)
|
|||||||
}
|
}
|
||||||
|
|
||||||
*last_symlink = '\0';
|
*last_symlink = '\0';
|
||||||
for (i = 0; i < active_nr; i++) {
|
for (i = 0; i < o->index->cache_nr; i++) {
|
||||||
struct cache_entry *ce = active_cache[i];
|
struct cache_entry *ce = o->index->cache[i];
|
||||||
|
|
||||||
if (ce->ce_flags & (CE_UPDATE | CE_REMOVE))
|
if (ce->ce_flags & (CE_UPDATE | CE_REMOVE))
|
||||||
display_progress(progress, ++cnt);
|
display_progress(progress, ++cnt);
|
||||||
if (ce->ce_flags & CE_REMOVE) {
|
if (ce->ce_flags & CE_REMOVE) {
|
||||||
if (o->update)
|
if (o->update)
|
||||||
unlink_entry(ce->name, last_symlink);
|
unlink_entry(ce->name, last_symlink);
|
||||||
remove_cache_entry_at(i);
|
remove_index_entry_at(o->index, i);
|
||||||
i--;
|
i--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -105,7 +106,7 @@ static int unpack_index_entry(struct cache_entry *ce, struct unpack_trees_option
|
|||||||
if (o->skip_unmerged) {
|
if (o->skip_unmerged) {
|
||||||
o->pos++;
|
o->pos++;
|
||||||
} else {
|
} else {
|
||||||
remove_entry(o->pos);
|
remove_entry(o->pos, o);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -242,9 +243,9 @@ static int unpack_nondirectories(int n, unsigned long mask, unsigned long dirmas
|
|||||||
return call_unpack_fn(src, o, remove);
|
return call_unpack_fn(src, o, remove);
|
||||||
|
|
||||||
n += o->merge;
|
n += o->merge;
|
||||||
remove_entry(remove);
|
remove_entry(remove, o);
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
add_cache_entry(src[i], ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
|
add_index_entry(o->index, src[i], ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,8 +262,8 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
|
|||||||
|
|
||||||
/* Are we supposed to look at the index too? */
|
/* Are we supposed to look at the index too? */
|
||||||
if (o->merge) {
|
if (o->merge) {
|
||||||
while (o->pos < active_nr) {
|
while (o->pos < o->index->cache_nr) {
|
||||||
struct cache_entry *ce = active_cache[o->pos];
|
struct cache_entry *ce = o->index->cache[o->pos];
|
||||||
int cmp = compare_entry(ce, info, p);
|
int cmp = compare_entry(ce, info, p);
|
||||||
if (cmp < 0) {
|
if (cmp < 0) {
|
||||||
if (unpack_index_entry(ce, o) < 0)
|
if (unpack_index_entry(ce, o) < 0)
|
||||||
@ -277,7 +278,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
|
|||||||
*/
|
*/
|
||||||
if (o->skip_unmerged)
|
if (o->skip_unmerged)
|
||||||
return mask;
|
return mask;
|
||||||
remove_entry(o->pos);
|
remove_entry(o->pos, o);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
src[0] = ce;
|
src[0] = ce;
|
||||||
@ -312,8 +313,8 @@ static int unpack_failed(struct unpack_trees_options *o, const char *message)
|
|||||||
return error(message);
|
return error(message);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
discard_cache();
|
discard_index(o->index);
|
||||||
read_cache();
|
read_index(o->index);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,8 +350,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
|
|||||||
|
|
||||||
/* Any left-over entries in the index? */
|
/* Any left-over entries in the index? */
|
||||||
if (o->merge) {
|
if (o->merge) {
|
||||||
while (o->pos < active_nr) {
|
while (o->pos < o->index->cache_nr) {
|
||||||
struct cache_entry *ce = active_cache[o->pos];
|
struct cache_entry *ce = o->index->cache[o->pos];
|
||||||
if (unpack_index_entry(ce, o) < 0)
|
if (unpack_index_entry(ce, o) < 0)
|
||||||
return unpack_failed(o, NULL);
|
return unpack_failed(o, NULL);
|
||||||
}
|
}
|
||||||
@ -395,7 +396,7 @@ static int verify_uptodate(struct cache_entry *ce,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!lstat(ce->name, &st)) {
|
if (!lstat(ce->name, &st)) {
|
||||||
unsigned changed = ce_match_stat(ce, &st, CE_MATCH_IGNORE_VALID);
|
unsigned changed = ie_match_stat(o->index, ce, &st, CE_MATCH_IGNORE_VALID);
|
||||||
if (!changed)
|
if (!changed)
|
||||||
return 0;
|
return 0;
|
||||||
/*
|
/*
|
||||||
@ -415,10 +416,10 @@ static int verify_uptodate(struct cache_entry *ce,
|
|||||||
error("Entry '%s' not uptodate. Cannot merge.", ce->name);
|
error("Entry '%s' not uptodate. Cannot merge.", ce->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void invalidate_ce_path(struct cache_entry *ce)
|
static void invalidate_ce_path(struct cache_entry *ce, struct unpack_trees_options *o)
|
||||||
{
|
{
|
||||||
if (ce)
|
if (ce)
|
||||||
cache_tree_invalidate_path(active_cache_tree, ce->name);
|
cache_tree_invalidate_path(o->index->cache_tree, ce->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -463,12 +464,12 @@ static int verify_clean_subdirectory(struct cache_entry *ce, const char *action,
|
|||||||
* in that directory.
|
* in that directory.
|
||||||
*/
|
*/
|
||||||
namelen = strlen(ce->name);
|
namelen = strlen(ce->name);
|
||||||
pos = cache_name_pos(ce->name, namelen);
|
pos = index_name_pos(o->index, ce->name, namelen);
|
||||||
if (0 <= pos)
|
if (0 <= pos)
|
||||||
return cnt; /* we have it as nondirectory */
|
return cnt; /* we have it as nondirectory */
|
||||||
pos = -pos - 1;
|
pos = -pos - 1;
|
||||||
for (i = pos; i < active_nr; i++) {
|
for (i = pos; i < o->index->cache_nr; i++) {
|
||||||
struct cache_entry *ce = active_cache[i];
|
struct cache_entry *ce = o->index->cache[i];
|
||||||
int len = ce_namelen(ce);
|
int len = ce_namelen(ce);
|
||||||
if (len < namelen ||
|
if (len < namelen ||
|
||||||
strncmp(ce->name, ce->name, namelen) ||
|
strncmp(ce->name, ce->name, namelen) ||
|
||||||
@ -566,9 +567,9 @@ static int verify_absent(struct cache_entry *ce, const char *action,
|
|||||||
* delete this path, which is in a subdirectory that
|
* delete this path, which is in a subdirectory that
|
||||||
* is being replaced with a blob.
|
* is being replaced with a blob.
|
||||||
*/
|
*/
|
||||||
cnt = cache_name_pos(ce->name, strlen(ce->name));
|
cnt = index_name_pos(o->index, ce->name, strlen(ce->name));
|
||||||
if (0 <= cnt) {
|
if (0 <= cnt) {
|
||||||
struct cache_entry *ce = active_cache[cnt];
|
struct cache_entry *ce = o->index->cache[cnt];
|
||||||
if (ce->ce_flags & CE_REMOVE)
|
if (ce->ce_flags & CE_REMOVE)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -597,17 +598,17 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
|
|||||||
} else {
|
} else {
|
||||||
if (verify_uptodate(old, o))
|
if (verify_uptodate(old, o))
|
||||||
return -1;
|
return -1;
|
||||||
invalidate_ce_path(old);
|
invalidate_ce_path(old, o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (verify_absent(merge, "overwritten", o))
|
if (verify_absent(merge, "overwritten", o))
|
||||||
return -1;
|
return -1;
|
||||||
invalidate_ce_path(merge);
|
invalidate_ce_path(merge, o);
|
||||||
}
|
}
|
||||||
|
|
||||||
merge->ce_flags &= ~CE_STAGEMASK;
|
merge->ce_flags &= ~CE_STAGEMASK;
|
||||||
add_cache_entry(merge, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
|
add_index_entry(o->index, merge, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -621,14 +622,14 @@ static int deleted_entry(struct cache_entry *ce, struct cache_entry *old,
|
|||||||
if (verify_absent(ce, "removed", o))
|
if (verify_absent(ce, "removed", o))
|
||||||
return -1;
|
return -1;
|
||||||
ce->ce_flags |= CE_REMOVE;
|
ce->ce_flags |= CE_REMOVE;
|
||||||
add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
|
add_index_entry(o->index, ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
|
||||||
invalidate_ce_path(ce);
|
invalidate_ce_path(ce, o);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int keep_entry(struct cache_entry *ce, struct unpack_trees_options *o)
|
static int keep_entry(struct cache_entry *ce, struct unpack_trees_options *o)
|
||||||
{
|
{
|
||||||
add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
|
add_index_entry(o->index, ce, ADD_CACHE_OK_TO_ADD);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -728,7 +729,7 @@ int threeway_merge(struct cache_entry **stages,
|
|||||||
|
|
||||||
/* #1 */
|
/* #1 */
|
||||||
if (!head && !remote && any_anc_missing) {
|
if (!head && !remote && any_anc_missing) {
|
||||||
remove_entry(remove);
|
remove_entry(remove, o);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -762,7 +763,7 @@ int threeway_merge(struct cache_entry **stages,
|
|||||||
if ((head_deleted && remote_deleted) ||
|
if ((head_deleted && remote_deleted) ||
|
||||||
(head_deleted && remote && remote_match) ||
|
(head_deleted && remote && remote_match) ||
|
||||||
(remote_deleted && head && head_match)) {
|
(remote_deleted && head && head_match)) {
|
||||||
remove_entry(remove);
|
remove_entry(remove, o);
|
||||||
if (index)
|
if (index)
|
||||||
return deleted_entry(index, index, o);
|
return deleted_entry(index, index, o);
|
||||||
else if (ce && !head_deleted) {
|
else if (ce && !head_deleted) {
|
||||||
@ -788,7 +789,7 @@ int threeway_merge(struct cache_entry **stages,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_entry(remove);
|
remove_entry(remove, o);
|
||||||
o->nontrivial_merge = 1;
|
o->nontrivial_merge = 1;
|
||||||
|
|
||||||
/* #2, #3, #4, #6, #7, #9, #10, #11. */
|
/* #2, #3, #4, #6, #7, #9, #10, #11. */
|
||||||
@ -853,7 +854,7 @@ int twoway_merge(struct cache_entry **src,
|
|||||||
}
|
}
|
||||||
else if (oldtree && !newtree && same(current, oldtree)) {
|
else if (oldtree && !newtree && same(current, oldtree)) {
|
||||||
/* 10 or 11 */
|
/* 10 or 11 */
|
||||||
remove_entry(remove);
|
remove_entry(remove, o);
|
||||||
return deleted_entry(oldtree, current, o);
|
return deleted_entry(oldtree, current, o);
|
||||||
}
|
}
|
||||||
else if (oldtree && newtree &&
|
else if (oldtree && newtree &&
|
||||||
@ -863,7 +864,7 @@ int twoway_merge(struct cache_entry **src,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* all other failures */
|
/* all other failures */
|
||||||
remove_entry(remove);
|
remove_entry(remove, o);
|
||||||
if (oldtree)
|
if (oldtree)
|
||||||
return o->gently ? -1 : reject_merge(oldtree);
|
return o->gently ? -1 : reject_merge(oldtree);
|
||||||
if (current)
|
if (current)
|
||||||
@ -875,7 +876,7 @@ int twoway_merge(struct cache_entry **src,
|
|||||||
}
|
}
|
||||||
else if (newtree)
|
else if (newtree)
|
||||||
return merged_entry(newtree, current, o);
|
return merged_entry(newtree, current, o);
|
||||||
remove_entry(remove);
|
remove_entry(remove, o);
|
||||||
return deleted_entry(oldtree, current, o);
|
return deleted_entry(oldtree, current, o);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -922,14 +923,14 @@ int oneway_merge(struct cache_entry **src,
|
|||||||
o->merge_size);
|
o->merge_size);
|
||||||
|
|
||||||
if (!a) {
|
if (!a) {
|
||||||
remove_entry(remove);
|
remove_entry(remove, o);
|
||||||
return deleted_entry(old, old, o);
|
return deleted_entry(old, old, o);
|
||||||
}
|
}
|
||||||
if (old && same(old, a)) {
|
if (old && same(old, a)) {
|
||||||
if (o->reset) {
|
if (o->reset) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (lstat(old->name, &st) ||
|
if (lstat(old->name, &st) ||
|
||||||
ce_match_stat(old, &st, CE_MATCH_IGNORE_VALID))
|
ie_match_stat(o->index, old, &st, CE_MATCH_IGNORE_VALID))
|
||||||
old->ce_flags |= CE_UPDATE;
|
old->ce_flags |= CE_UPDATE;
|
||||||
}
|
}
|
||||||
return keep_entry(old, o);
|
return keep_entry(old, o);
|
||||||
|
@ -28,6 +28,7 @@ struct unpack_trees_options {
|
|||||||
|
|
||||||
struct cache_entry *df_conflict_entry;
|
struct cache_entry *df_conflict_entry;
|
||||||
void *unpack_data;
|
void *unpack_data;
|
||||||
|
struct index_state *index;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int unpack_trees(unsigned n, struct tree_desc *t,
|
extern int unpack_trees(unsigned n, struct tree_desc *t,
|
||||||
|
Loading…
Reference in New Issue
Block a user