Skip to content

Commit bc052d7

Browse files
torvaldsgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent d1f128b commit bc052d7

File tree

7 files changed

+52
-39
lines changed

7 files changed

+52
-39
lines changed

builtin-checkout.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,15 @@ static int reset_to_new(struct tree *tree, int quiet)
152152
{
153153
struct unpack_trees_options opts;
154154
struct tree_desc tree_desc;
155+
155156
memset(&opts, 0, sizeof(opts));
156157
opts.head_idx = -1;
157158
opts.update = 1;
158159
opts.reset = 1;
159160
opts.merge = 1;
160161
opts.fn = oneway_merge;
161162
opts.verbose_update = !quiet;
163+
opts.index = &the_index;
162164
parse_tree(tree);
163165
init_tree_desc(&tree_desc, tree->buffer, tree->size);
164166
if (unpack_trees(1, &tree_desc, &opts))
@@ -170,13 +172,15 @@ static void reset_clean_to_new(struct tree *tree, int quiet)
170172
{
171173
struct unpack_trees_options opts;
172174
struct tree_desc tree_desc;
175+
173176
memset(&opts, 0, sizeof(opts));
174177
opts.head_idx = -1;
175178
opts.skip_unmerged = 1;
176179
opts.reset = 1;
177180
opts.merge = 1;
178181
opts.fn = oneway_merge;
179182
opts.verbose_update = !quiet;
183+
opts.index = &the_index;
180184
parse_tree(tree);
181185
init_tree_desc(&tree_desc, tree->buffer, tree->size);
182186
if (unpack_trees(1, &tree_desc, &opts))
@@ -224,8 +228,10 @@ static int merge_working_tree(struct checkout_opts *opts,
224228
struct tree_desc trees[2];
225229
struct tree *tree;
226230
struct unpack_trees_options topts;
231+
227232
memset(&topts, 0, sizeof(topts));
228233
topts.head_idx = -1;
234+
topts.index = &the_index;
229235

230236
refresh_cache(REFRESH_QUIET);
231237

builtin-commit.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ static void create_base_index(void)
198198
opts.head_idx = 1;
199199
opts.index_only = 1;
200200
opts.merge = 1;
201+
opts.index = &the_index;
201202

202203
opts.fn = oneway_merge;
203204
tree = parse_tree_indirect(head_sha1);

builtin-merge-recursive.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ static int git_merge_trees(int index_only,
213213
opts.merge = 1;
214214
opts.head_idx = 2;
215215
opts.fn = threeway_merge;
216+
opts.index = &the_index;
216217

217218
init_tree_desc_from_tree(t+0, common);
218219
init_tree_desc_from_tree(t+1, head);

builtin-read-tree.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
102102

103103
memset(&opts, 0, sizeof(opts));
104104
opts.head_idx = -1;
105+
opts.index = &the_index;
105106

106107
git_config(git_default_config);
107108

diff-lib.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,6 +734,7 @@ int run_diff_index(struct rev_info *revs, int cached)
734734
opts.merge = 1;
735735
opts.fn = oneway_diff;
736736
opts.unpack_data = revs;
737+
opts.index = &the_index;
737738

738739
init_tree_desc(&t, tree->buffer, tree->size);
739740
if (unpack_trees(1, &t, &opts))
@@ -787,6 +788,7 @@ int do_diff_cache(const unsigned char *tree_sha1, struct diff_options *opt)
787788
opts.merge = 1;
788789
opts.fn = oneway_diff;
789790
opts.unpack_data = &revs;
791+
opts.index = &the_index;
790792

791793
init_tree_desc(&t, tree->buffer, tree->size);
792794
if (unpack_trees(1, &t, &opts))

unpack-trees.c

Lines changed: 40 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#define NO_THE_INDEX_COMPATIBILITY_MACROS
12
#include "cache.h"
23
#include "dir.h"
34
#include "tree.h"
@@ -7,10 +8,10 @@
78
#include "progress.h"
89
#include "refs.h"
910

10-
static inline void remove_entry(int remove)
11+
static inline void remove_entry(int remove, struct unpack_trees_options *o)
1112
{
1213
if (remove >= 0)
13-
remove_cache_entry_at(remove);
14+
remove_index_entry_at(o->index, remove);
1415
}
1516

1617
/* Unlink the last component and attempt to remove leading
@@ -53,8 +54,8 @@ static void check_updates(struct unpack_trees_options *o)
5354
int i;
5455

5556
if (o->update && o->verbose_update) {
56-
for (total = cnt = 0; cnt < active_nr; cnt++) {
57-
struct cache_entry *ce = active_cache[cnt];
57+
for (total = cnt = 0; cnt < o->index->cache_nr; cnt++) {
58+
struct cache_entry *ce = o->index->cache[cnt];
5859
if (ce->ce_flags & (CE_UPDATE | CE_REMOVE))
5960
total++;
6061
}
@@ -65,15 +66,15 @@ static void check_updates(struct unpack_trees_options *o)
6566
}
6667

6768
*last_symlink = '\0';
68-
for (i = 0; i < active_nr; i++) {
69-
struct cache_entry *ce = active_cache[i];
69+
for (i = 0; i < o->index->cache_nr; i++) {
70+
struct cache_entry *ce = o->index->cache[i];
7071

7172
if (ce->ce_flags & (CE_UPDATE | CE_REMOVE))
7273
display_progress(progress, ++cnt);
7374
if (ce->ce_flags & CE_REMOVE) {
7475
if (o->update)
7576
unlink_entry(ce->name, last_symlink);
76-
remove_cache_entry_at(i);
77+
remove_index_entry_at(o->index, i);
7778
i--;
7879
continue;
7980
}
@@ -105,7 +106,7 @@ static int unpack_index_entry(struct cache_entry *ce, struct unpack_trees_option
105106
if (o->skip_unmerged) {
106107
o->pos++;
107108
} else {
108-
remove_entry(o->pos);
109+
remove_entry(o->pos, o);
109110
}
110111
return 0;
111112
}
@@ -242,9 +243,9 @@ static int unpack_nondirectories(int n, unsigned long mask, unsigned long dirmas
242243
return call_unpack_fn(src, o, remove);
243244

244245
n += o->merge;
245-
remove_entry(remove);
246+
remove_entry(remove, o);
246247
for (i = 0; i < n; i++)
247-
add_cache_entry(src[i], ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
248+
add_index_entry(o->index, src[i], ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
248249
return 0;
249250
}
250251

@@ -261,8 +262,8 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
261262

262263
/* Are we supposed to look at the index too? */
263264
if (o->merge) {
264-
while (o->pos < active_nr) {
265-
struct cache_entry *ce = active_cache[o->pos];
265+
while (o->pos < o->index->cache_nr) {
266+
struct cache_entry *ce = o->index->cache[o->pos];
266267
int cmp = compare_entry(ce, info, p);
267268
if (cmp < 0) {
268269
if (unpack_index_entry(ce, o) < 0)
@@ -277,7 +278,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
277278
*/
278279
if (o->skip_unmerged)
279280
return mask;
280-
remove_entry(o->pos);
281+
remove_entry(o->pos, o);
281282
continue;
282283
}
283284
src[0] = ce;
@@ -312,8 +313,8 @@ static int unpack_failed(struct unpack_trees_options *o, const char *message)
312313
return error(message);
313314
return -1;
314315
}
315-
discard_cache();
316-
read_cache();
316+
discard_index(o->index);
317+
read_index(o->index);
317318
return -1;
318319
}
319320

@@ -349,8 +350,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
349350

350351
/* Any left-over entries in the index? */
351352
if (o->merge) {
352-
while (o->pos < active_nr) {
353-
struct cache_entry *ce = active_cache[o->pos];
353+
while (o->pos < o->index->cache_nr) {
354+
struct cache_entry *ce = o->index->cache[o->pos];
354355
if (unpack_index_entry(ce, o) < 0)
355356
return unpack_failed(o, NULL);
356357
}
@@ -395,7 +396,7 @@ static int verify_uptodate(struct cache_entry *ce,
395396
return 0;
396397

397398
if (!lstat(ce->name, &st)) {
398-
unsigned changed = ce_match_stat(ce, &st, CE_MATCH_IGNORE_VALID);
399+
unsigned changed = ie_match_stat(o->index, ce, &st, CE_MATCH_IGNORE_VALID);
399400
if (!changed)
400401
return 0;
401402
/*
@@ -415,10 +416,10 @@ static int verify_uptodate(struct cache_entry *ce,
415416
error("Entry '%s' not uptodate. Cannot merge.", ce->name);
416417
}
417418

418-
static void invalidate_ce_path(struct cache_entry *ce)
419+
static void invalidate_ce_path(struct cache_entry *ce, struct unpack_trees_options *o)
419420
{
420421
if (ce)
421-
cache_tree_invalidate_path(active_cache_tree, ce->name);
422+
cache_tree_invalidate_path(o->index->cache_tree, ce->name);
422423
}
423424

424425
/*
@@ -463,12 +464,12 @@ static int verify_clean_subdirectory(struct cache_entry *ce, const char *action,
463464
* in that directory.
464465
*/
465466
namelen = strlen(ce->name);
466-
pos = cache_name_pos(ce->name, namelen);
467+
pos = index_name_pos(o->index, ce->name, namelen);
467468
if (0 <= pos)
468469
return cnt; /* we have it as nondirectory */
469470
pos = -pos - 1;
470-
for (i = pos; i < active_nr; i++) {
471-
struct cache_entry *ce = active_cache[i];
471+
for (i = pos; i < o->index->cache_nr; i++) {
472+
struct cache_entry *ce = o->index->cache[i];
472473
int len = ce_namelen(ce);
473474
if (len < namelen ||
474475
strncmp(ce->name, ce->name, namelen) ||
@@ -566,9 +567,9 @@ static int verify_absent(struct cache_entry *ce, const char *action,
566567
* delete this path, which is in a subdirectory that
567568
* is being replaced with a blob.
568569
*/
569-
cnt = cache_name_pos(ce->name, strlen(ce->name));
570+
cnt = index_name_pos(o->index, ce->name, strlen(ce->name));
570571
if (0 <= cnt) {
571-
struct cache_entry *ce = active_cache[cnt];
572+
struct cache_entry *ce = o->index->cache[cnt];
572573
if (ce->ce_flags & CE_REMOVE)
573574
return 0;
574575
}
@@ -597,17 +598,17 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
597598
} else {
598599
if (verify_uptodate(old, o))
599600
return -1;
600-
invalidate_ce_path(old);
601+
invalidate_ce_path(old, o);
601602
}
602603
}
603604
else {
604605
if (verify_absent(merge, "overwritten", o))
605606
return -1;
606-
invalidate_ce_path(merge);
607+
invalidate_ce_path(merge, o);
607608
}
608609

609610
merge->ce_flags &= ~CE_STAGEMASK;
610-
add_cache_entry(merge, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
611+
add_index_entry(o->index, merge, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
611612
return 1;
612613
}
613614

@@ -621,14 +622,14 @@ static int deleted_entry(struct cache_entry *ce, struct cache_entry *old,
621622
if (verify_absent(ce, "removed", o))
622623
return -1;
623624
ce->ce_flags |= CE_REMOVE;
624-
add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
625-
invalidate_ce_path(ce);
625+
add_index_entry(o->index, ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
626+
invalidate_ce_path(ce, o);
626627
return 1;
627628
}
628629

629630
static int keep_entry(struct cache_entry *ce, struct unpack_trees_options *o)
630631
{
631-
add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
632+
add_index_entry(o->index, ce, ADD_CACHE_OK_TO_ADD);
632633
return 1;
633634
}
634635

@@ -728,7 +729,7 @@ int threeway_merge(struct cache_entry **stages,
728729

729730
/* #1 */
730731
if (!head && !remote && any_anc_missing) {
731-
remove_entry(remove);
732+
remove_entry(remove, o);
732733
return 0;
733734
}
734735

@@ -762,7 +763,7 @@ int threeway_merge(struct cache_entry **stages,
762763
if ((head_deleted && remote_deleted) ||
763764
(head_deleted && remote && remote_match) ||
764765
(remote_deleted && head && head_match)) {
765-
remove_entry(remove);
766+
remove_entry(remove, o);
766767
if (index)
767768
return deleted_entry(index, index, o);
768769
else if (ce && !head_deleted) {
@@ -788,7 +789,7 @@ int threeway_merge(struct cache_entry **stages,
788789
return -1;
789790
}
790791

791-
remove_entry(remove);
792+
remove_entry(remove, o);
792793
o->nontrivial_merge = 1;
793794

794795
/* #2, #3, #4, #6, #7, #9, #10, #11. */
@@ -853,7 +854,7 @@ int twoway_merge(struct cache_entry **src,
853854
}
854855
else if (oldtree && !newtree && same(current, oldtree)) {
855856
/* 10 or 11 */
856-
remove_entry(remove);
857+
remove_entry(remove, o);
857858
return deleted_entry(oldtree, current, o);
858859
}
859860
else if (oldtree && newtree &&
@@ -863,7 +864,7 @@ int twoway_merge(struct cache_entry **src,
863864
}
864865
else {
865866
/* all other failures */
866-
remove_entry(remove);
867+
remove_entry(remove, o);
867868
if (oldtree)
868869
return o->gently ? -1 : reject_merge(oldtree);
869870
if (current)
@@ -875,7 +876,7 @@ int twoway_merge(struct cache_entry **src,
875876
}
876877
else if (newtree)
877878
return merged_entry(newtree, current, o);
878-
remove_entry(remove);
879+
remove_entry(remove, o);
879880
return deleted_entry(oldtree, current, o);
880881
}
881882

@@ -922,14 +923,14 @@ int oneway_merge(struct cache_entry **src,
922923
o->merge_size);
923924

924925
if (!a) {
925-
remove_entry(remove);
926+
remove_entry(remove, o);
926927
return deleted_entry(old, old, o);
927928
}
928929
if (old && same(old, a)) {
929930
if (o->reset) {
930931
struct stat st;
931932
if (lstat(old->name, &st) ||
932-
ce_match_stat(old, &st, CE_MATCH_IGNORE_VALID))
933+
ie_match_stat(o->index, old, &st, CE_MATCH_IGNORE_VALID))
933934
old->ce_flags |= CE_UPDATE;
934935
}
935936
return keep_entry(old, o);

unpack-trees.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ struct unpack_trees_options {
2828

2929
struct cache_entry *df_conflict_entry;
3030
void *unpack_data;
31+
struct index_state *index;
3132
};
3233

3334
extern int unpack_trees(unsigned n, struct tree_desc *t,

0 commit comments

Comments
 (0)